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

时间:2011-07-30 03:02:40

标签: c++ templates pointers member

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

struct Person {
  Dog dog;
};

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

typedef Strange<&Person::dog> weird;

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

1 个答案:

答案 0 :(得分:40)

来自标准:

  

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

     
      
  • 整数或枚举类型,
  •   
  • 指向对象或指向函数的指针,
  •   
  • 引用对象或对函数的引用,
  •   
  • 指向会员的指针。
  •   

所以这是允许的,并且似乎可以在g++上工作:

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