Что это за методика C ++ для добавления типов в класс?
-
10-07-2019 - |
Вопрос
Я только что нашел код C ++ (на http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx ), в котором используется метод, который я никогда раньше не видел, для добавления типов в существующий класс: р>
class Testpm {
public:
void m_func1() { cout << "m_func1\n"; }
int m_num;
};
// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;
int main() {
Testpm ATestpm;
Testpm *pTestpm = new Testpm;
// Access the member function
(ATestpm.*pmfn)();
(pTestpm->*pmfn)(); // Parentheses required since * binds
// Access the member data
ATestpm.*pmd = 1;
pTestpm->*pmd = 2;
cout << ATestpm.*pmd << endl
<< pTestpm->*pmd << endl;
}
Может кто-нибудь сказать мне, как называется этот метод определения производных типов, или указать мне некоторую документацию по нему? Я никогда не сталкивался с этим за 13 лет использования C ++ и хотел бы покончить с моим невежеством.
Решение
Комментарий неправильный: pmfn и pmd не являются "производными типами" на всех (они даже не типы!). Это указатели на участников .
Другие советы
Я не думаю, что они " добавляют типы " к классу. Кажется, что они просто определяют типы указателей на функции-члены и данные-члены класса, а затем используют их для доступа к функции-члену и члену данных. Подобно тому, как вы объявляете типы для функций, не являющихся членами, но будучи членами класса, синтаксис отличается.
С этого сайта здесь
Что касается их синтаксиса, есть два различные типы указателей на функции: С одной стороны, есть указатели на обычные функции C или статические C ++ функции-члены. С другой стороны есть указатели на нестатический C ++ функции-члены. Основная разница является то, что все указатели на нестатические функции-члены должны быть скрытыми Аргумент: указатель this на экземпляр класса. Всегда держите в ум: эти два типа функций указатели несовместимы с каждым другие.