指向类成员的指针作为模板参数

Jon*_*ing 29 c++ templates pointers member

是否可以使用非类型模板参数,它实际上是指向类成员的指针?我想要做的是如下:

struct Person {
  Dog dog;
};

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

typedef Strange<&Person::dog> weird;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的工作让我相信没有任何类似的可能,但我很好奇是否有人可以说不然.

ham*_*mar 44

从标准:

非类型模板参数应具有以下之一(可选的cv-quali fi ed)类型:

  • 积分或枚举类型,
  • 指向对象或指向函数的指针,
  • 引用对象或引用函数,
  • 指向成员的指针.

所以这是允许的,似乎可以这样工作g++:

template <Dog Person::*ptr>
struct Strange { ... };
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我可以进一步概括为`template <class A,class B,AB ::*member>`,这对我很有用.我想我应该把标准的那一部分读得更近了. (14认同)
  • 有没有办法可以省略前两个参数A和B? (5认同)
  • @user1158559 请参阅提案 N3601。通过http://stackoverflow.com/questions/15148749/pointer-to-class-member-as-a-template-parameter (3认同)
  • 在 C++20(也许更早)中,您现在也可以执行“template &lt;auto member_ptr&gt;”! (2认同)