考虑具有成员变量的类,如下所示:

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;

不幸的是,必须传入 ClassType 模板参数每次使最终指针工作。

有什么办法可以通过偏特化推导出这些论点,
例如?也就是说,如何声明 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/

10-11 22:50