Что это за методика C ++ для добавления типов в класс?

StackOverflow https://stackoverflow.com/questions/1643197

  •  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 на   экземпляр класса. Всегда держите в   ум: эти два типа функций   указатели несовместимы с каждым   другие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top