统一的调用语法和函数指针
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
进入的常规指针。
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
进入的常规指针。