boost/python/data_members.hpp

はじめに

make_getter および make_setter は、class_<>::def_readonly および class_<>::def_readwrite が C++ データメンバをラップする Python の呼び出し可能オブジェクトを生成するために内部的に使用する関数である。

関数

make_getter

template<class C, class D>
object make_getter(D C::* pm)
template<class C, class D, class Policies>
object make_getter(D C::* pm, Policies const &policies)
要件

PoliciesCallPolicies のモデル。

効果

C*from_python 変換可能な引数 1 つをとり、C オブジェクトの対応メンバ Dto_python 変換したものを返す Python の呼び出し可能オブジェクトを作成する。policies が与えられた場合、ここに述べるとおり関数に適用される。それ以外の場合、ライブラリは D がユーザ定義クラス型か判断し、そうであれば Policies に対して return_internal_reference<> を使用する。D がスマートポインタ型の場合、このテストで return_internal_reference<> が不適当に選択される可能性があることに注意していただきたい。これは既知の欠陥である。

戻り値

新しい Python の呼び出し可能オブジェクトを保持する object のインスタンス。

template<class D>
object make_getter(D const &d)
template<class D, class Policies>
object make_getter(D const &d, Policies const &policies)
template<class D>
object make_getter(D const *p)
template<class D, class Policies>
object make_getter(D const *p, Policies const &policies)
要件

PoliciesCallPolicies のモデル。

効果

引数をとらず、必要に応じて to_python 変換した d*p を返す Python の呼び出し可能オブジェクトを作成する。policies が与えられた場合、ここに述べるとおり関数に適用される。それ以外の場合、ライブラリは D がユーザ定義クラス型か判断し、そうであれば D に対して reference_existing_object を使用する。

戻り値

新しい Python の呼び出し可能オブジェクトを保持する object のインスタンス。

make_setter

template<class C, class D>
object make_setter(D C::* pm)
template<class C, class D, class Policies>
object make_setter(D C::* pm, Policies const &policies)
要件

PoliciesCallPolicies のモデル。

効果

Python の呼び出し可能オブジェクトを作成する。このオブジェクトは Python から呼び出されるときに C*D const& にそれぞれ from_python 変換可能な 2 つの引数をとり、C オブジェクトの対応する D メンバを設定する。policies が与えられた場合、ここに述べるとおり関数に適用される。

戻り値

新しい Python の呼び出し可能オブジェクトを保持する object のインスタンス。

template<class D>
object make_setter(D &d)
template<class D, class Policies>
object make_setter(D &d, Policies const &policies)
template<class D>
object make_setter(D *p)
template<class D, class Policies>
object make_setter(D *p, Policies const &policies)
要件

PoliciesCallPolicies のモデル。

効果

Python から D const& に変換され、d または *p に書き込まれる 1 つの引数を受け取る Python の呼び出し可能オブジェクトを作成する。policies が与えられた場合、ここに述べるとおり関数に適用される。

戻り値

新しい Python の呼び出し可能オブジェクトを保持する object のインスタンス。

以下のコードは、make_getter および make_setter を使用してデータメンバを関数としてエクスポートする。

#include <boost/python/data_members.hpp>
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>

struct X
{
    X(int x) : y(x) {}
    int y;
};

using namespace boost::python;

BOOST_PYTHON_MODULE_INIT(data_members_example)
{
    class_<X>("X", init<int>())
       .def("get", make_getter(&X::y))
       .def("set", make_setter(&X::y))
       ;
}

Python から次のように使用する。

>>> from data_members_example import *
>>> x = X(1)
>>> x.get()
1
>>> x.set(2)
>>> x.get()
2