我使用pybind11包装了一个简单的c ++接口/类
public function add($tasktypeid)
{
$this->autoRender = false; //no need for view
debug($this->request->data());
if($this->request->is('post'))
{
debug($this->request->data());
}
}
IBaseObject是接口,SmartPtr是自定义持有人类型,BaseObject_Create是工厂函数,它返回IBaseObject *。
从python实例化类工作正常,但是我还想在将IBaseObject *作为参数传递时实例化C ++的python包装类。这可能吗?
答案 0 :(得分:0)
如果只想在C ++绑定代码中实例化类,则可以使用pybind
的Python C ++接口:
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__"));