用C++调用Python函数 我试图从C++中实现调用Python函数。我认为它可以通过函数指针实现,但似乎不可能。我一直在使用boost.python来实现这一点

用C++调用Python函数 我试图从C++中实现调用Python函数。我认为它可以通过函数指针实现,但似乎不可能。我一直在使用boost.python来实现这一点,c++,python,callback,boost-python,C++,Python,Callback,Boost Python,假设Python中定义了一个函数: def callback(arg1, arg2): #do something return something 现在我需要把这个函数传递给C++,这样就可以从那里调用它。如何在BC++中使用BooSt.Python编写代码来实现这个?不是一个线索。但是,一旦有了函数对象,您就可以使用来调用它。我以前没有使用过它,但参考手册中有一个名为的部分,似乎说明了如何执行此操作。如果它可能有任何名称: 将其传递给接受boost::python::obj

假设Python中定义了一个函数:

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

现在我需要把这个函数传递给C++,这样就可以从那里调用它。如何在BC++中使用BooSt.Python编写代码来实现这个?

不是一个线索。但是,一旦有了函数对象,您就可以使用来调用它。

我以前没有使用过它,但参考手册中有一个名为的部分,似乎说明了如何执行此操作。

如果它可能有任何名称:

将其传递给接受boost::python::object的函数

如果它位于具有一致名称的单个已知命名空间中:

bp::object pycb = bp::scope("namespace").attr("callback");
对象定义了运算符,所以您可以像调用任何函数一样调用它

ret = pycb()

我使用PyRun_SimpleStringmyFunction作为快速黑客,因为我的函数名是已知的,不使用参数,并且生活在_main____名称空间中。注意:如果您是多线程的,您还需要获得lock GIL。

Boost python文档基本上已经过时,即使是最新的,也非常糟糕。该页面没有显示python函数。它只是向您展示了如何使用已绑定的对象调用一个。不是一个简单的例子。Thnks Matthew,我还有一个问题。在这里,python对象是从同一线程调用的。如果python对象是全局的,并且是从另一个线程调用的,该怎么办?这是可能的,尽管有点超出了这个问题的范围。我建议研究C/Python API的PyGILState_*函数族。与boostpython不同,Python有非常好的文档。如果你还需要更多的帮助,问另一个问题。对于未来的观众:最终有人问了另一个问题,我回答了。请看这里:stackoverflow.com/questions/8009613/boost-python-not-supporting-parallelism/80111538011153@MatthewScouten你能给出一个简单的工作例子,我可以理解,因为我对C++非常陌生,而且我对Python有更多的了解。谢谢。现在,如果boost在他们的文档中给出一个简单的例子,说明如何做到这一点。。。至少我们有堆栈溢出,如果你有一个boost::python::object,你可以用它的操作符来调用它。
ret = pycb()