Boost で クラスのメンバ変数で可変の引数を使いたい
やりたいことをモデル化したイメージ
>>> import hoge >>> hoge.add(1) 1 >>> hoge.add(1, 2) 3 >>> hoge.add(1, 2, 3) 6
このために解決したいのはこのサンプルを動かすことです。
#include <boost/python/module.hpp> #include <boost/python/def.hpp> #include <boost/python/args.hpp> #include <boost/python/tuple.hpp> #include <boost/python/class.hpp> #include <boost/python/overloads.hpp> #include <boost/python/return_internal_reference.hpp> using namespace boost::python; tuple f(int x = 1, double y = 4.25, char const* z = "wow") { return make_tuple(x, y, z); } BOOST_PYTHON_FUNCTION_OVERLOADS(f_overloads, f, 0, 3) class X { X( const int& _loc) { localval=_loc; } int returnsame(int x=5) { return x+localval; } static int returnsum(int m,int x=10) { return m+x; } int localval; }; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(X_returnsame_overloads, X::returnsame, 0, 1) BOOST_PYTHON_FUNCTION_OVERLOADS(X_returnsum_overloads, X::returnsum, 1, 2) BOOST_PYTHON_MODULE(args_ext) { def("f", f, f_overloads( args("x", "y", "z"), "This is f's docstring" )); class_<X>("X", init<int>()) .def("returnsame", &X::returnsame, X_returnsame_overloads( args("x"), "returnsame's docstring" ) ) .def("returnsum", &X::returnsum, X_returnsum_overloads( args("x","m"), "returnsum's docstring" ) ) .staticmethod("returnsum")gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) Python 2.7 boost version 1.58.0 ; }
上記のreturnsumの部分を動かしたいのですが
このままではpublic:がないのでコンパイル時にエラーになり、public:を追加しても Xをimportすると
ImportError: dynamic module does not define init function (initX)
というエラーになります。
テスト環境は以下のようになっています
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) Python 2.7 boost version 1.58.0
自力では解決が難しくお力添えいただきたくお願いいたします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。