考虑具有成员变量的类,如下所示:
struct A {
int a;
char b;
};
struct B {
double c;
bool d;
};
是否可以声明一个接受作为其模板的模板类
参数一个指向成员对象的指针,指向声明的任何一个成员
在上述类(class)中?
接受泛型成员对象指针的类可以是
声明和使用如下:
template<typename Class, typename Type, Type (Class::*Member)>
struct Magic
{ };
// Usage:
typedef Magic<A, int, &A::a> MagicWithA_a;
不幸的是,必须传入
Class
和Type
模板参数每次使最终指针工作。有什么办法可以通过偏特化推导出这些论点,
例如?也就是说,如何声明
Magic
类来使下面的定义有效吗?
typedef Magic<&B::c> MagicWithB_c;
typedef Magic<&A::b> MagicWithA_b;
最佳答案
在 C++17 中,您可以使用 auto
非类型模板参数:
template<auto p_member>
struct Magic
{ };
在 C++17 之前,只有你已经实现的更长的变体才能工作。
关于c++ - 推导指向成员模板参数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48478886/