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) - 要件
Policiesは CallPolicies のモデル。- 効果
C*へfrom_python変換可能な引数 1 つをとり、Cオブジェクトの対応メンバDをto_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) - 要件
Policiesは CallPolicies のモデル。- 効果
引数をとらず、必要に応じて
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) - 要件
Policiesは CallPolicies のモデル。- 効果
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) - 要件
Policiesは CallPolicies のモデル。- 効果
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