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

时间:2019-02-03 13:23:58

标签: c++ pointer-to-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)相同。以前,我以为指向成员函数的指针与指向数据成员的指针完全不同。

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

我唯一能找到的是,如果成员函数是虚拟的,则通过指向基本函数的指针进行调用将调用派生函数,这对于非函数成员的指针而言是非问题。

我问的原因是我正在处理指向成员的通用指针,我想知道我要寻找的内容以及指向成员函数与数据成员的指针的特殊情况。

1 个答案:

答案 0 :(得分:1)

  

之前,我以为指向成员函数的指针与指向数据成员的指针完全不同。

您的想法正确。

  

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

它们是单独的类型。它们的大小可能不同。指向成员函数的指针可以指向成员函数。指向数据成员的指针可以指向数据成员。区别类似于函数指针和数据指针之间的区别。

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