我尝试用 pybind11 绑定(bind)静态重载函数,但遇到了一些问题。
这是示例代码
#include <pybind11/pybind11.h>
namespace py = pybind11;
class TESTDB {
public:
static void aaaa(int a, int b) {printf("aaaaa");};
static void aaaa(int a) {printf("xxxxx");};
};
PYBIND11_MODULE(example, m) {
py::class_<TESTDB>(m, "db")
.def_static("aaaa", (void (TESTDB::*)(int, int)) &TESTDB::aaaa);
}
但是编译失败是因为
error: no matches converting function ‘aaaa’ to type ‘void (class TESTDB::*)(int, int)’
.def_static("aaaa", (void (TESTDB::*)(int, int)) &TESTDB::aaaa);
note: candidates are: static void TESTDB::aaaa(int)
static void aaaa(int a) {printf("xxxxx");};
note: static void TESTDB::aaaa(int, int)
static void aaaa(int a, int b) {printf("aaaaa");};
有什么想法吗?
谢谢
最佳答案
问题是你的转换 (void (TESTDB::*)(int, int))
。该转换将指向静态成员函数的指针转换为指向非-静态成员函数的指针,这是不正确的。
由于函数是静态的,您应该简单地将它们转换为指向普通非成员函数的指针:
py::class_<TESTDB>(m, "db")
.def_static("aaaa", static_cast<void (*)(int, int)>(&TESTDB::aaaa));
关于python - 无法在 pybind11 中绑定(bind)重载的静态成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613577/