统一的调用语法和函数指针

Unified Call Syntax and Function Pointers

A bit of background for the unified call proposal

统一调用语法是否允许 C++ 程序员轻松地将成员函数指针转换为非成员函数pointer 反之亦然?

换句话说,它是否允许通过 非成员函数指针 调用 成员函数 通过发送 class的实例作为第一个参数?

struct X
{
    void member() { }
};

X x;

void (*fp)(X*) = &X::member; // ?
fp(&x);                      // ?

不,那永远行不通,因为指向成员函数的指针不能用简单的函数指针表示。指向成员函数的指针必须能够处理对其应用的对象的虚拟调用,因此它必须包含(或触发生成)代码以在必要时取消引用 vptr。即,它不是您可以 call 进入的常规指针。