...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
<boost/python/pointee.hpp> introduces a traits metafunction template pointee<T>
that can be used to extract the "pointed-to"
type from the type of a pointer or smart pointer.
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.
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; }; }
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(...) ... ; }