我有一个C ++课
我在C ++代码中从这个类创建了一个对象。我希望这个对象可以在Python中访问。我使用boost::shared_ptr
来保留对象地址。
我查了一些关于此的帖子,但不是很有帮助。 我认为最好的方法是在解释器初始化之后在Python命名空间中创建一个对象,然后将我的boost shared_ptr分配给Python中创建的对象。
我在cpp中使用BOOST_PYTHON_MODULE
包装了我的类,并测试了namespace["my_module_name_in_python"] = class<"my_class">...
之类的一些方法,以便能够在python中创建一个对象并用shared_ptr
填充它。
总之,我的问题是如何将shared_ptr
中包含的C ++对象传递给python。
提前致谢
答案 0 :(得分:1)
这取自官方的boost python文档。
假设您有一个C ++类,如下所示:
class Vec2 {
public:
Vec2(double, double);
double length();
double angle();
};
您可以像这样导出Python接口:
object py_vec2 = class_<Vec2>("Vec2", init<double, double>())
.def_readonly("length", &Point::length)
.def_readonly("angle", &Point::angle)
)
类定义现在存储在变量py_vec2
中。现在我可以用:
object vec_instance = py_vec2(3.0, 4.0);
现在可以将此实例注入Python解释器。 E.g将其设置为"__main__"
模块的变量:
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["vec_instance"] = vec_instance;