pybind11 py::class_.def_property_readonly_static () -> str 的不兼容函数参数
pybind11 py::class_.def_property_readonly_static incompatible function arguments for () -> str
我正在尝试将 C++ class 静态非参数方法绑定到 python class 静态常量字段使用 pybind11。
这是我的示例代码 config.cpp
:
namespace py = pybind11;
struct Env {
static std::string env() {
return std::getenv("MY_ENV");
}
};
PYBIND11_MODULE(config, m) {
m.doc() = "my config module written in C++";
py::class_<Env>(m, "Env")
.def_property_readonly_static("ENV", &Env::env);
}
配置模块编译成功,但是当我在 python3 控制台中使用它时,出现以下异常:
>>> from config import Env
>>> Env.ENV
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: (): incompatible function arguments. The following argument types are supported:
1. () -> str
Invoked with: <class 'config.Env'>
我该如何解决这个问题?
或者有没有办法将 C++ 函数绑定到 python 模块常量 attributes/variables?
这是关于如何将 C++ class 静态非参数方法 绑定到 python class 静态的答案常量 attribute/variable 与 def_property_readonly_static
API: https://pybind11.readthedocs.io/en/stable/advanced/classes.html#static-properties
关键是要使用 C++11 lambda,所以像这样更新 config.cpp
中的 PYBIND11_MODULE 部分:
PYBIND11_MODULE(config, m) {
m.doc() = "my config module written in C++";
py::class_<Env>(m, "Env")
.def_property_readonly_static("ENV", [](py::object /* self */){ return Env::env(); });
}
对于第二个问题,如何将C++无参数函数绑定到python常量attributes/variables ,我还是不知道。
我正在尝试将 C++ class 静态非参数方法绑定到 python class 静态常量字段使用 pybind11。
这是我的示例代码 config.cpp
:
namespace py = pybind11;
struct Env {
static std::string env() {
return std::getenv("MY_ENV");
}
};
PYBIND11_MODULE(config, m) {
m.doc() = "my config module written in C++";
py::class_<Env>(m, "Env")
.def_property_readonly_static("ENV", &Env::env);
}
配置模块编译成功,但是当我在 python3 控制台中使用它时,出现以下异常:
>>> from config import Env
>>> Env.ENV
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: (): incompatible function arguments. The following argument types are supported:
1. () -> str
Invoked with: <class 'config.Env'>
我该如何解决这个问题?
或者有没有办法将 C++ 函数绑定到 python 模块常量 attributes/variables?
这是关于如何将 C++ class 静态非参数方法 绑定到 python class 静态的答案常量 attribute/variable 与 def_property_readonly_static
API: https://pybind11.readthedocs.io/en/stable/advanced/classes.html#static-properties
关键是要使用 C++11 lambda,所以像这样更新 config.cpp
中的 PYBIND11_MODULE 部分:
PYBIND11_MODULE(config, m) {
m.doc() = "my config module written in C++";
py::class_<Env>(m, "Env")
.def_property_readonly_static("ENV", [](py::object /* self */){ return Env::env(); });
}
对于第二个问题,如何将C++无参数函数绑定到python常量attributes/variables ,我还是不知道。