Код: Выделить всё
struct MyType {
double a;
double b;
};
void func(size_t foo, const MyType& bar) {
// ...
}
// ...
PYBIND11_MODULE(pymylib, module) {
// ...
py::class_< MyType >(module, "MyType")
.def(py::init< double, double >(), "a"_a, "b"_a)
.def(py::init([](const std::array< double, 2 >& ab){ return MyType({ab[0], ab[1]}); }), "ab"_a = std::array< double, 2>{ 1.0, 0.25 }) // not implicit
.def_readwrite("a", &MyType::a)
.def_readwrite("b", &MyType::b);
py::implicitly_convertible< std::array< double, 2 >, MyType >(); // conversion is not implicit
module.def("func", &func, "foo"_a, "bar"_a);
}
Код: Выделить всё
obj = module.MyType(8.7, 5.6)
module.func(47, obj) # works
module.func(47, module.MyType([4.1, 7.8])) # works
module.func(47, [4.1, 7.8]) # does not work ('incompatible function arguments')
Из-за простоты структуры необходимость явного вызова конструктора кажется ненужной, особенно если определено в подмодуле Python или вложено в другой класс;
Как, если возможно, добиться такого поведения в Python?
Подробнее здесь: https://stackoverflow.com/questions/781 ... h-pybind11
Мобильная версия