如果在C++中,一个类有一个重载的构造函数:
class MyClass {
std::string name;
public:
MyClass(){};
MyClass(std::string name_){ name = name_;}
};
如何将其暴露给Python?我可以同时使用py::overload_cast
和py::init
吗?
目前我揭露第一个:
PYBIND11_MODULE(ex_module, module_handle){
module_handle.doc() = "ex class";
py::class_<MyClass>(module_handle, "PyEx")
.def(py::init<>())
;
}
(Note我使用的是C++20和Python>=3.10)
我希望能够做到:
new_obj = PyEx()
new_obj = PyEx("blah")
目前,PyEx("blah")
没有抛出任何错误,但它也没有真正将blah
传递到C++构造函数中。我通过在第二个构造函数中添加一个print语句来检查这一点。
**编辑:**简化了问题。
1条答案
按热度按时间v7pvogib1#
不需要使用任何
overload_cast
技巧,因为公开构造函数与公开传递指向成员函数的指针的方法不同。你只需要在默认构造函数之后(或之前)定义你的单参数构造函数: