2 回答

TA贡献1878条经验 获得超4个赞
问题是你的演员(void (TESTDB::*)(int, int))
。该转换将指向静态成员函数的指针转换为指向非静态成员函数的指针,这是不正确的。
由于函数是静态的,您应该简单地将它们转换为指向普通非成员函数的指针:
py::class_<TESTDB>(m, "db") .def_static("aaaa", static_cast<void (*)(int, int)>(&TESTDB::aaaa));

TA贡献1793条经验 获得超6个赞
仅供参考 - 首先,C++ 标准草案n3337(本质上是 C++11)的8.3.1 指针 [dcl.ptr] / 1
在声明 TD 中,其中 D 具有以下形式
* attribute-specifier-seq cv-qualifier-seq D1并且声明 T D1 中的标识符的类型是“ derived-declarator-type-list T”,那么 D 的标识符的类型是“ derived-declarator-type-list cv-qualifier-seq指向 T 的指针”。...
和8.3.3 成员指针 [dcl.mptr] / 1状态
在声明 TD 中,其中 D 具有以下形式
nested-name-specifier * attribute-specifier-seq cv-qualifier-seq D1并且nested-name-specifier表示一个类,声明T D1中标识符的类型是“ derived-declarator-type-list T”,那么D的标识符的类型是“ derived-declarator-type-”列出 指向T 类型嵌套名称说明符类成员的cv-qualifier-seq指针。...
这些语句意味着我们必须在当且仅当函数是成员函数时使用上面的嵌套名称说明符 TESTDB::
TESTDB::*
TESTDB::aaaa
。
接下来,5.2.2 函数调用【expr.call】状态
函数调用有两种:普通函数调用和成员函数63(9.3)调用。...
在脚注63是
63 ) 静态成员函数 (9.4) 是一个普通函数。
这意味着您的静态成员函数TESTDB::aaaa
是一个普通函数,而不是一个成员函数。因此,您不得TESTDB::
在当前演员表中指定。
总之,您必须消除TESTDB::aaaa
像这样的两个重载的歧义:
static_cast<void (*)(int, int)>(&TESTDB::aaaa)
添加回答
举报