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