###

# Boost.Python

## Header <boost/python/pointee.hpp>

## Contents

Introduction
Classes
  Class Template`pointee`
    Class Template `pointee` synopsis
Example

## Introduction

`<boost/python/pointee.hpp>` introduces a traits metafunction template `pointee<T>` which can be used to extract the "pointed-to" type from the type of a pointer or smart pointer.

## Classes

### Class Template `pointee<class T>`

`pointee<T>` is used by the `class_<...>` template to deduce the type being held when a pointer or smart pointer type is used as its `HeldType` argument.

#### Class Template `pointee` synopsis

    namespace boost { namespace python
    {
       template <class T> struct pointee
       {
          typedef T::element_type type;
       };

       // specialization for pointers
       template <T> struct pointee<T*>
       {
          typedef T type;
       };
    }

## Example

Given a 3rd-party smart pointer type `smart_pointer<T>`, one might partially specialize `pointee<smart_pointer<T> >` so that it can be used as the `HeldType` for a class wrapper:

    #include <boost/python/pointee.hpp>
    #include <boost/python/class.hpp>
    #include <third_party_lib.hpp>

    namespace boost { namespace python
    {
      template <class T> struct pointee<smart_pointer<T> >
      {
         typedef T type;
      };
    }}

    BOOST_PYTHON_MODULE(pointee_demo)
    {
       class_<third_party_class, smart_pointer<third_party_class> >("third_party_class")
          .def(...)
          ...
          ;
    }

Revised 13 November, 2002

© Copyright Dave Abrahams 2002.