c++ - 从模板成员类型派生模板化类的成员变量类型

标签 c++ templates type-deduction

标题可能看起来有点困惑,所以这里有一个更彻底的解释:
我有一个模板类,它有一个 vector 作为成员变量。模板参数是一个结构(或类),它将具有一个特定的变量。这个 vector 的类型应该从模板参数(从这个某个变量)派生出来。棘手的部分是它应该从模板参数的成员变量派生。

#include <vector>
#include <complex>
using namespace std;

struct thingA {
    double variable;
    //...
};

struct thingB {
    complex<double> variable;
    //...
};


template <class S>
class someClass {
    vector< " type of S::variable " > history; // If S=thingA, make it a double, if S=tingB make it a complex<double>
}

// Usage:
someClass<thingA> myInstanceA; // (this instance should now have a vector<double>)

someClass<thingB> myInstanceB; // (this instance should now have a vector<complex<double>>)

最佳答案

您可以通过 decltype 获取类型, 如果数据成员的名称始终相同:

template <class S>
class someClass {
    vector< decltype(S::variable) > history; // if S=thingA, make it a double, if S=tingB make it a complex<double>
};

关于c++ - 从模板成员类型派生模板化类的成员变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67366762/

相关文章:

c++ - 为什么 argc 不是常数?

c++ - 程序跳过第二个 cin

c++ - C++ 中的简单文本菜单

php - 将 html 网站转换为简单的 PHP 模板网站

c++ - 使用显式实例化设置类模板的方法

c++ - 类型推导失败,指针指向成员方法

c++ - 尝试使用 fread 读取文本文件时出现类型为 'System.AccessViolationException' 的未处理异常

C++ 用其他类型的值替换成员变量

c++ - 将初始化列表与可变参数模板一起使用

c++ - Variadic 模板函数参数和引用类型推导