如何使用boost.python跨模块使用类
How to use class across modules with boost.python?
说我有两个模块,例如:
// 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 类的实例传递给其他模块中定义的C 函数。
在模块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))
而不是。
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 如何使用 soong 命名空间来有条件地编译模块
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- 如何使用/包含QtNetwork模块
- 没有头文件如何使用c ++调用其他模块中的函数?
- Python C API:使用 MSVC 尝试示例模块时的访问冲突
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 在 c++20 中使用模块
- 如何使用 swig C++命名空间作为 python 模块公开
- 是否可以使用另一个lua文件中定义的表,该表在当前文件中不需要作为模块
- 如何使用配置模式进行find_package搜索并在模块模式下回退?
- 如何使用 Apache C 模块登录到文件
- 如何将标准库与C++模块一起使用?(例如:“导入 std.io”)
- 如何在omnet++简单模块中使用lpsolve
- 在FTDI 2232H迷你模块上使用GPIO输入而不是TDO/DI
- 尝试在cpp模块中使用汇编程序代码时发生链接器错误
- 线程池与英特尔线程构建模块一起使用
- 如何在Objective C模块中使用c++内存管理例程
- 如何在CPP和cuda模块中使用cuda类头文件
- 在 LLVM 模块中使用C++类