使用成员函数而不获取地址?
Using member function without taking address?
class C{
public:
int i(){return 3;}
};
void memfn(int (C::* const & func)()){}
void fn(int (* const & func)()){}
int main() {
fn(&foo); //Works
fn(foo); //Works
memfn(&C::i); //Works
memfn(C::i); //Doesn't Work
}
将函数指针作为参数传递时,寻址运算符在函数上是可选的。为什么在成员函数上删除后它不起作用?
存在从全局函数引用或静态成员函数引用或 non-capturing lambda 到函数指针的隐式转换。这是为了 C 的能力。
但是这种隐式 reference-to-pointer 转换不适用于 non-static 成员函数(并捕获 lambda!),因为它们需要隐式传递的 this
指针才能工作,转换只是缺少那个东西。
对于您的情况,如果我们将 i()
设为静态,则可以通过引用或地址将其传递给 fn
。
class C{
public:
int i(){return 3;}
};
void memfn(int (C::* const & func)()){}
void fn(int (* const & func)()){}
int main() {
fn(&foo); //Works
fn(foo); //Works
memfn(&C::i); //Works
memfn(C::i); //Doesn't Work
}
将函数指针作为参数传递时,寻址运算符在函数上是可选的。为什么在成员函数上删除后它不起作用?
存在从全局函数引用或静态成员函数引用或 non-capturing lambda 到函数指针的隐式转换。这是为了 C 的能力。
但是这种隐式 reference-to-pointer 转换不适用于 non-static 成员函数(并捕获 lambda!),因为它们需要隐式传递的 this
指针才能工作,转换只是缺少那个东西。
对于您的情况,如果我们将 i()
设为静态,则可以通过引用或地址将其传递给 fn
。