指向成员函数的指针与指向数据成员的指针有何不同?

How is a pointer to a member function different than a pointer to a data member?

所以我有这个别名模板:

template<class MemberT, class ClassT>
using make_member_ptr = MemberT ClassT::*;

我注意到 make_member_ptr<int(char, long), class_type>int(class_type::*)(char, long) 相同。之前,我一直在想,指向成员函数的指针与指向数据成员的指针是完全不同的。

指向成员函数的指针与指向数据成员的指针有何不同?

我唯一能找到的是,如果成员函数是虚拟的,通过指向基函数的指针调用将调用派生函数,这对于非函数成员的指针来说不是问题。

我问的原因是我正在处理指向成员的通用指针,我想知道我必须注意什么以及指向成员函数和数据成员的指针的特殊情况。

Before, I was thinking that a pointer to a member function is completely different to a pointer to a data member.

你想对了。

How do pointers to member functions differ from pointers to data members?

它们是不同的类型。它们可能有不同的尺寸。指向成员函数的指针可以指向一个成员函数。指向数据成员的指针可以指向一个数据成员。区别类似于函数指针和数据指针之间的区别。

make_member_ptr<int(char, long), class_type>是指向成员函数的指针。