PythonからC++クラスメソッドへの参照によって簡単な呼び出しをしようとしています。参照引数を使ってpythonメソッドを呼び出す
私のC++のコードは次のようになります罰金コンパイル
class Foo {
protected:
int _internalVal;
public:
Foo() : _internalVal(5){}
void getVal(int& val_io) {val_io = _internalVal;}
void getValDoesNothing(int val_io) {val_io = _internalVal;}
}
マイブーストラッパーコードは次のとおりです。
BOOST_PYTHON_MODULE(libBar) {
boost::python::class_<Foo>("Foo")
.def("getVal", &Foo::getVal)
.def("getValDoesNothing", &Foo::getValDoesNothing);
}
しかし、私は、次のPythonの呼び出しを行うとき:
In [1]: import libBar
In [2]: f = libBar.Foo()
In [3]: f
Out[3]: <libBar.Foo at 0x2b483c0>
In [4]: val = int()
In [5]: #next command is just to check function signature type
In [6]: f.getValDoesNothing(val)
In [7]: f.getVal(val)
---------------------------------------------------------------------------
ArgumentError Traceback (most recent call last)
<ipython-input-5-531e4cea97c2> in <module>()
----> 1 f.getVal(val)
ArgumentError: Python argument types in
Foo.getVal(Foo, int)
did not match C++ signature:
getVal(Foo {lvalue}, int {lvalue})
私は私が制御しないライブラリで作業しているので、値を返すgetValの変更はオプションではありません。
最後のPythonコマンドを動作させる方法はありますか?
私は、Python変数を変更しないが、まだ関数呼び出しを許可する修正を行うことさえあります。
私は参考にしています。私の質問は私がそれをどうやって行うのだろうか? –