2

我有一门 C++ 课。
我在我的 C++ 代码中从这个类创建一个对象。我希望这个对象可以在 Python 中访问。我boost::shared_ptr用来保存对象地址。

我已经查看了一些关于此的帖子,但不是很有帮助。我认为最好的方法是在解释器初始化后在 Python 命名空间中创建一个对象,然后将我的 boost shared_ptr 分配给 Python 中创建的对象。

我已经使用BOOST_PYTHON_MODULEcpp 包装了我的类,并测试了一些方法,比如namespace["my_module_name_in_python"] = class<"my_class">...能够在 python 中创建一个对象并用shared_ptr.

总之,我的问题是如何将包含在 a 中的 C++ 对象传递shared_ptr给 python。

提前致谢

4

1 回答 1

1

This is taken from the official boost python documentation.

Lets say you have a C++ class that looks like this:

class Vec2 {
public:
    Vec2(double, double);
    double length();
    double angle();
};

You can derive the Python interface for it like that:

object py_vec2 = class_<Vec2>("Vec2", init<double, double>())
    .def_readonly("length", &Point::length)
    .def_readonly("angle", &Point::angle)
)

The class definition is now stored in the variable py_vec2. Now I can create an instance of said class with:

object vec_instance = py_vec2(3.0, 4.0);

This instance can now be injected to a Python interpreter. E.g set it into a variable of the "__main__" module:

object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");

main_namespace["vec_instance"] = vec_instance;
于 2013-09-18T14:10:33.037 回答