18

C++からPython関数を呼び出そうとしています。関数ポインタで実現できると思いましたが、実現できないようです。私はboost.pythonこれを達成するために使用しています。

Pythonで定義された関数があるとしましょう:

def callback(arg1, arg2):
    #do something
    return something

次に、この関数をC ++に渡して、そこから呼び出すことができるようにする必要があります。これを実現するために使用してC++側でコードを作成するにはどうすればよいboost.pythonですか?

4

4 に答える 4

15

名前が付いている可能性がある場合:

をとる関数に渡しますboost::python::object

bp::object pycb; //global variable. could also store it in a map, etc
void register_callback(bp::object cb)
{
      pycb = cb;
}

一貫した名前を持つ単一の既知の名前空間にある場合:

bp::object pycb = bp::scope("namespace").attr("callback");

bp::objectoperator()定義されているので、他の関数と同じように呼び出します

ret = pycb()
于 2010-12-02T16:52:01.547 に答える
4

さっぱり分からない。ただしPyObject_Call()、関数オブジェクトを取得したら、を使用して呼び出すことができます。

于 2010-12-02T04:24:35.543 に答える
2

これまで使用したことはありませんが、リファレンスマニュアルには、Python関数とメソッドの呼び出しというセクションがあり、これを行う方法が示されているようです。

于 2010-12-02T04:25:01.473 に答える
1

PyRun_SimpleString("myFunction()")関数の名前が知られていて、引数を取らず、__main__名前空間に住んでいたので、私は簡単なハックとして使用しました。マルチスレッドの場合は、さらにロック GIL を取得する必要があることに注意してください。

于 2011-07-14T06:49:38.093 に答える