Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pybind11:init<&燃气轮机;和lambda 我将pybDun11作为我的C++代码的包装器,放到python库中。 P>>发生了一些我不能提供的参数,或者有时我想做一个我在C++中知道的转换/初始化。例如,这可能是因为python中不知道该类。这怎么可能呢?到目前为止,我所看到的唯一的“解决方案”是在C++中创建继承的代理类。_Python_C++_Pybind11 - Fatal编程技术网

Pybind11:init<&燃气轮机;和lambda 我将pybDun11作为我的C++代码的包装器,放到python库中。 P>>发生了一些我不能提供的参数,或者有时我想做一个我在C++中知道的转换/初始化。例如,这可能是因为python中不知道该类。这怎么可能呢?到目前为止,我所看到的唯一的“解决方案”是在C++中创建继承的代理类。

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

示例:我想定义/绑定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 {
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));