Указатель на член класса в качестве параметра шаблона
Возможно ли иметь параметр шаблона типа non-type, который на самом деле является указателем на член класса? Я хочу сделать следующее:
struct Person {
Dog dog;
};
template <?? ptr>
struct Strange {
// ...
};
typedef Strange<&Person::dog> weird;
Моя работа до сих пор заставляет меня поверить, что ничего подобного не возможно, но мне любопытно, может ли кто-нибудь сказать об этом.
Ответы
Ответ 1
Из стандарта:
Шаблон-параметр непигового типа должен иметь один из следующих (необязательно cv-qualified) типов:
- интегральный или перечисляемый тип,
- указатель на объект или указатель на функцию,
- ссылка на объект или ссылку на функцию,
- указатель на член.
Итак, это разрешено и, похоже, работает на g++
следующим образом:
template <Dog Person::*ptr>
struct Strange { ... };