Pybind11:如何为将结构作为参数的函数创建绑定?
Pybind11: How to create bindings for a function that takes in a struct as an argument?
请参阅下面的 C++ 代码,我正在尝试为
创建 python 绑定
struct Config {
int a;
int b;
};
void myfunction(const Config &config);
这是我目前的情况,
PYBIND11_MODULE(example, m) {
py::class_<Config>(m, "Config")
.def_readwrite("a", &Config::a)
.def_readwrite("b", &Config::b);
m.def("myfunction", &myfunction);
}
这可以编译,但是当我尝试调用 python 中的 python 绑定时,
import example
config = example.Config;
config.a = 1;
config.b = 2;
example.myfunction(config)
我收到以下错误
TypeError: myfunction(): incompatible function arguments. The following argument types are supported:
1. (arg0: example.Config) -> None
Invoked with: <class 'example.Config'>
谁能告诉我为接受结构作为参数的函数创建 python 绑定的正确方法是什么?
正如@eyllanesc 所暗示的,问题将通过添加默认构造函数来解决:
PYBIND11_MODULE(example, m) {
py::class_<Config>(m, "Config")
.def(py::init<>())
.def_readwrite("a", &Config::a)
.def_readwrite("b", &Config::b);
m.def("myfunction", &myfunction);
}
import example
config = example.Config();
config.a = 1;
config.b = 2;
example.myfunction(config)
请参阅下面的 C++ 代码,我正在尝试为
创建 python 绑定struct Config {
int a;
int b;
};
void myfunction(const Config &config);
这是我目前的情况,
PYBIND11_MODULE(example, m) {
py::class_<Config>(m, "Config")
.def_readwrite("a", &Config::a)
.def_readwrite("b", &Config::b);
m.def("myfunction", &myfunction);
}
这可以编译,但是当我尝试调用 python 中的 python 绑定时,
import example
config = example.Config;
config.a = 1;
config.b = 2;
example.myfunction(config)
我收到以下错误
TypeError: myfunction(): incompatible function arguments. The following argument types are supported:
1. (arg0: example.Config) -> None
Invoked with: <class 'example.Config'>
谁能告诉我为接受结构作为参数的函数创建 python 绑定的正确方法是什么?
正如@eyllanesc 所暗示的,问题将通过添加默认构造函数来解决:
PYBIND11_MODULE(example, m) {
py::class_<Config>(m, "Config")
.def(py::init<>())
.def_readwrite("a", &Config::a)
.def_readwrite("b", &Config::b);
m.def("myfunction", &myfunction);
}
import example
config = example.Config();
config.a = 1;
config.b = 2;
example.myfunction(config)