boost/python/return_value_policy.hpp

はじめに

return_value_policy のインスタンスは、単純に ResultConverterGenerator と省略可能な Base CallPolicies を合成した CallPolicies モデルである。

クラス

return_value_policy クラステンプレート

template<class ResultConverterGenerator, class Base = default_call_policies>
struct return_value_policy : Base
テンプレートパラメータ

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

namespace boost { namespace python
{
  template <class ResultConverterGenerator, class Base = default_call_policies>
  struct return_value_policy : Base
  {
      typedef ResultConverterGenerator result_converter;
  };
}}

C++ のモジュール定義
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/copy_const_reference.hpp>
#include <boost/python/return_value_policy.hpp>

// ラップするクラス群
struct Bar { int x; }

struct Foo {
   Foo(int x) : { b.x = x; }
   Bar const& get_bar() const { return b; }
 private:
   Bar b;
};

// ラッパコード
using namespace boost::python;
BOOST_PYTHON_MODULE(my_module)
{
   class_<Bar>("Bar");

   class_<Foo>("Foo", init<int>())
      .def("get_bar", &Foo::get_bar
          , return_value_policy<copy_const_reference>())
      ;
}
Python のコード
>>> from my_module import *
>>> f = Foo(3)         # Foo オブジェクトを作成
>>> b = f.get_bar()    # 内部的な Bar オブジェクトのコピーを作成