gpt4 book ai didi

c++ - 从 C++ 实例化包装类

转载 作者:行者123 更新时间:2023-11-28 04:26:03 24 4
gpt4 key购买 nike

我已经使用 pybind11 包装了一个简单的 C++ 接口(interface)/类

py::class_<IBaseObject, SmartPtr<IBaseObject>>(m, "BaseObject")
.def(py::init([]()
{
return BaseObject_Create();
}))
)

IBaseObject 是接口(interface),SmartPtr 是自定义持有者类型,BaseObject_Create 是返回 IBaseObject* 的工厂函数。

从 python 实例化类工作正常,但是我还想在传递 IBaseObject* 作为参数时从 C++ 实例化 python 包装类。这可能吗?

最佳答案

如果您只想在 C++ 绑定(bind)代码中实例化您的类,您可以使用 pybind 的 Python C++ 接口(interface):

https://pybind11.readthedocs.io/en/stable/advanced/pycpp/object.html#calling-python-functions

一些方法可以做到这一点:

// Option 1: Use your existing class handle.
py::class_<IBaseObject, ...> py_cls(...);
py::object py_obj = py_cls();
// - Cast it if you need to.
auto* obj = py_obj.cast<IBaseObject*>();
// - or cast to `SmartPtr<IBaseObject>()` if its shareable.

// Option 2: Re-import elsewhere in your code.
py::object py_cls = py::module::import("my_pybind_module").attr("IBaseObject");
py::object py_obj = py_cls();
// - etc...

// Option 3: Use `eval` (blech)
py::module m = py::module::import("my_pybind_module");
py::object py_obj = py::eval("IBaseObject()", /* globals */ m.attr("__dict__"));

关于c++ - 从 C++ 实例化包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com