统一的调用语法和函数指针 统一调用语法允许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的引用。也就是说,它不是一个你可以直接调用的常规指针。如果你只是想调用它,不一定要将它存储为普通函数指针,这不是要用于吗?如果你只是想调用它,不一定要将它存储为普通函数指针,这不是要用于吗?