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

Pointer to class member as template parameter

本文关键字:形参 指针 成员      更新时间:2023-10-16

是否有可能具有非类型模板参数,实际上是指向类成员的指针?我想要做的是如下所示:

struct Person {
  Dog dog;
};
template <?? ptr>
struct Strange {
  // ...
};
typedef Strange<&Person::dog> weird;

到目前为止,我的工作让我相信这一切都是不可能的,但我很好奇是否有人能说不同的。

从标准:

非类型模板参数必须是以下类型之一(可选的cv限定):

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

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

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