boost/python/pointee.hpp

はじめに

<boost/python/pointee.hpp> は、ポインタやスマートポインタの型から「ポイントされている」型を抽出する特性メタ関数テンプレート pointee<T> を導入する。

クラス

pointee<class T> クラステンプレート

template<class T>
struct pointee

pointee<T> は、class_<> テンプレートでポインタやスマートポインタ型を HeldType 引数に使用するときに保持する型を推論するのに使用する。

pointee クラステンプレートの概要

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

   // ポインタに対する特殊化
   template <T> struct pointee<T*>
   {
      typedef T type;
   };
}

サードパーティ製のスマートポインタ型 smart_pointer<T> があるとして、pointee を部分特殊化してクラスラッパの HeldType として使用可能にする。

#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(...)
      ...
      ;
}