从模板成员类型派生模板化类的成员变量类型
标题可能看起来有点混乱,所以这里有一个更彻底的解释:
我有一个模板类,它有一个向量作为成员变量。模板参数是一个结构(或类),它将具有一个特定的变量。这个向量的类型应该从模板参数(从这个某个变量)派生出来。棘手的部分是它应该从模板参数的成员变量派生。
#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>
};
回答
我会在structs 中定义类型并在s 中使用它class:
#include <vector>
#include <complex>
using namespace std;
struct thingA {
using Type = double;
Type variable;
//...
};
struct thingB {
using Type = complex<double>;
Type varbiable;
//...
};
template <class S>
class someClass {
vector<typename S::Type> 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>>)
https://godbolt.org/z/raE9hbnqW
当变量没有相同的名称时,这也是要走的路。
- This is very helpful! Thank you. It is actually the way to go for me in my program. Although songyuangyao's answer better fits the my original (more general) question. Thank you very much. I love stackoverflow so much!