Указатель на член класса в качестве параметра шаблона - PullRequest
26 голосов
/ 30 июля 2011

Возможно ли иметь нетипичный параметр шаблона, который на самом деле является указателем на члена класса?Я собираюсь сделать что-то вроде следующего:

struct Person {
  Dog dog;
};

template <?? ptr>
struct Strange {
  // ...
};

typedef Strange<&Person::dog> weird;

Моя работа до сих пор заставляет меня поверить, что ничего подобного не возможно, но мне любопытно, если кто-то может сказать иначе.

1 Ответ

41 голосов
/ 30 июля 2011

Из стандарта:

Нетипизированный шаблон-параметр должен иметь один из следующих (необязательно квалифицированных cv) типов:

  • целочисленный или перечислимый тип,
  • указатель на объект или указатель на функцию,
  • ссылка на объект или ссылка на функцию,
  • указатель на элемент.

Так что это разрешено и, похоже, работает на g++ так:

template <Dog Person::*ptr>
struct Strange { ... };
...