Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
统一的调用语法和函数指针 统一调用语法允许C++程序员轻松地将成员函数指针转换为非成员函数指针,反之亦然?_C++_Function Pointers_Member Function Pointers_Function Call_C++17 - Fatal编程技术网

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

统一的调用语法和函数指针 统一调用语法允许C++程序员轻松地将成员函数指针转换为非成员函数指针,反之亦然?,c++,function-pointers,member-function-pointers,function-call,c++17,C++,Function Pointers,Member Function Pointers,Function Call,C++17,换句话说,它是否允许通过发送类的实例作为第一个参数,通过非成员函数指针调用成员函数 struct X { void member() { } }; X x; void (*fp)(X*) = &X::member; // ? fp(&x); // ? 不,这是行不通的,因为指向成员函数的指针不能用简单的函数指针表示。指向成员函数的指针必须能够处理对其应用的对象的虚拟调用,因此它必须包含或触发代码的生成,以便在必要时取消对vp

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

struct X
{
    void member() { }
};

X x;

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

不,这是行不通的,因为指向成员函数的指针不能用简单的函数指针表示。指向成员函数的指针必须能够处理对其应用的对象的虚拟调用,因此它必须包含或触发代码的生成,以便在必要时取消对vptr的引用。也就是说,它不是一个你可以直接调用的常规指针。

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

如果你只是想调用它,不一定要将它存储为普通函数指针,这不是要用于吗?如果你只是想调用它,不一定要将它存储为普通函数指针,这不是要用于吗?