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

Unified Call Syntax and Function Pointers

本文关键字:函数 指针 语法 调用      更新时间:2023-10-16

统一调用提案的一些背景知识

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

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

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

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