Чем указатель на функцию-член отличается от указателя на элемент данных? - PullRequest
0 голосов
/ 03 февраля 2019

Итак, у меня есть этот шаблон псевдонима:

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 голосов
/ 03 февраля 2019

Раньше я думал, что указатель на функцию-член полностью отличается от указателя на элемент данных.

Вы правильно подумали.

Чем отличаются указатели на функции-члены от указателей на члены-данные?

Это отдельные типы.Они могут иметь разные размеры.Указатель на функцию-член может указывать на функцию-член.Указатель на элемент данных может указывать на элемент данных.Разница аналогична разнице между указателями функций и указателями данных.

make_member_ptr<int(char, long), class_type> - указатель на функцию-член.

...