我试图实现从C++调用Python函数。我认为可以通过函数指针来实现,但似乎不可能。我一直在使用boost.python
来实现这一点。
假设有一个在Python中定义的函数:
def callback(arg1, arg2):
#do something
return something
现在我需要将这个函数传递给C++,以便可以从那里调用它。我该如何使用boost.python
编写C ++端的代码来实现这一点?
我试图实现从C++调用Python函数。我认为可以通过函数指针来实现,但似乎不可能。我一直在使用boost.python
来实现这一点。
假设有一个在Python中定义的函数:
def callback(arg1, arg2):
#do something
return something
现在我需要将这个函数传递给C++,以便可以从那里调用它。我该如何使用boost.python
编写C ++端的代码来实现这一点?
如果它可能有任何名称:
将其传递给一个接受 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::object
拥有定义的operator()
,因此您可以像调用任何函数一样调用它。
ret = pycb()
PyObject_Call()
来调用它。boost::python::object
,你可以直接使用它的 operator()
来调用它。 - eudoxos我之前没有使用过这个,但是参考手册中有一个章节叫做调用Python函数和方法,似乎展示了如何实现这一功能。
我使用了PyRun_SimpleString("myFunction()")
作为快速解决方案,因为我的函数名称已知,不需要参数,并且位于__main__
命名空间中。请注意,如果您是多线程的,则还需要获取锁GIL。