Pybind11:init<&燃气轮机;和lambda 我将pybDun11作为我的C++代码的包装器,放到python库中。 P>>发生了一些我不能提供的参数,或者有时我想做一个我在C++中知道的转换/初始化。例如,这可能是因为python中不知道该类。这怎么可能呢?到目前为止,我所看到的唯一的“解决方案”是在C++中创建继承的代理类。
示例:我想定义/绑定python类a:Pybind11:init<&燃气轮机;和lambda 我将pybDun11作为我的C++代码的包装器,放到python库中。 P>>发生了一些我不能提供的参数,或者有时我想做一个我在C++中知道的转换/初始化。例如,这可能是因为python中不知道该类。这怎么可能呢?到目前为止,我所看到的唯一的“解决方案”是在C++中创建继承的代理类。,python,c++,pybind11,Python,C++,Pybind11,示例:我想定义/绑定python类a: class A: def __init__(self, B b): ... 具有C++等价类: class A { A(C c, D d); } 我是否可以为pybind11::init创建某种lambda或等价物?pybind11允许将工厂函数绑定为init方法。因此,您必须提供C++中的函数,该函数使用B并返回A,然后将其绑定为A/< P>的init方法。 pybind11文档中的一个示例 class Example { priva
class A:
def __init__(self, B b):
...
具有C++等价类:
class A {
A(C c, D d);
}
我是否可以为pybind11::init创建某种lambda或等价物?pybind11允许将工厂函数绑定为init方法。因此,您必须提供C++中的函数,该函数使用B并返回A,然后将其绑定为A/< P>的init方法。 pybind11文档中的一个示例
class Example {
private:
Example(int); // private constructor
public:
// Factory function:
static Example create(int a) { return Example(a); }
};
py::class_<Example>(m, "Example")
.def(py::init(&Example::create));
类示例{
私人:
示例(int);//私有构造函数
公众:
//工厂功能:
静态示例create(inta){返回示例(a);}
};
py::class_m(示例)
.def(py::init(&Example::create));
你应该能够绑定在一个自由函数中(而不仅仅是静态函数),如果你不想(或不能)改变C++中的类A。 因此,它可能看起来像这样(更改为返回一个唯一的\u ptr,pybind只需拥有vs原始实例的所有权即可。但两者都可以工作)
std::unique_ptr如何从b
获取c
和d
的实例?你的问题不是很清楚。。。你能提供一个例子,说明你想在Python端使用这个类,以及在C++侧你想要发生什么,即使它不是有效的C++有效点。我试图概括一下,但它可能是pybind11中已知的std::string到QString的转换,例如,带有要使用的区域设置信息。在所有可能的例子中。或者在另一个例子中,我有B=C,但D是一个局部变量(在我的例子中,一个初始化为nullptr的指针,因此不是“那个”局部变量,但您得到了想要的用例的精神)
std::unique_ptr<A> createA(const B& arg)
{
// returns an instance of A that you made using B
}
py::class_<A>(m, "A")
.def(py::init(&createA));