python - 如何使用 boost.python 跨模块使用类?

标签 python c++ boost 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++ 类的实例传递给在其他模块中使用 boost.python 定义的 C++ 函数?

最佳答案

在模块 B 中公开 some_function 时,使用 boost::python::make_function。 根据 Boost.Python 的文档,

Creates a Python callable object which, when called from Python, converts its arguments to C++ and calls f.

这确保参数被转换为正确的 C++ 类型。所以用

boost::python::def("some_function", boost::python::make_function(&some_function))

相反。

关于python - 如何使用 boost.python 跨模块使用类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41327456/

相关文章:

c++11 - boost asio post 不起作用,io_service::run 在 post 后立即退出

python - Kivy无法连接kv语言的on_enter回调

python - 大型 Numpy Scipy CSR 矩阵,按行操作

python - SWIG:使用自定义代码包装对 C++ 方法的调用?

python - 退出python程序后调用bash脚本

c++ - 是否有必要锁定一个*仅从一个线程写入*而*仅从*另一个线程读取的数组?

c++ - 集成多态可扩展排序顺序

dynamic - 链接器不使用 g++ 进行本地(用户)boost 安装

c++ - Fortify on Visual Studio 2010 C++ 项目 - 错误 MSB6006 : -1073741701

c++ - BOOST_CHECK_EQUAL 与 pair<int, int> 和自定义运算符 <<