说我有两个模块,如:
// A.cpp
class A{ /*... */};
BOOST_PYTHON_MODULE(A){
boost::python::class_<A>("A")...
}
// B.cpp
#include "a.hpp"
int some_function(A a) { /* do something */ }
BOOST_PYTHON_MODULE(B){
boost::python::def("some_function", some_function) ...
}
现在在python中我想:
import A
import B
a=A.A(...)
B.some_function(a)
然而,它引发了一个Boost.Python.ArgumentError,表明该调用与C ++签名不匹配。
那么如何将一个C ++类的实例传递给其他模块中使用boost.python定义的C ++函数?
答案 0 :(得分:0)
当暴露模块B中的some_function时,使用boost :: python :: make_function。 根据Boost.Python的文档,
创建一个Python可调用对象,当从Python调用时,将其参数转换为C ++并调用f。
这可确保将参数转换为正确的C ++类型。所以使用
boost::python::def("some_function", boost::python::make_function(&some_function))
代替。