我试图在运行时使用字符串设置向量或元组的类型。我可以使用if,但想知道是否还有更好的选择
string typestr;
cin>>typeStr
if(typeStr=="int")
vector<int> sample;
else if(typeStr=="double")
vector<double> sample;
...
例如,类似这样的东西会很棒(也可以理解为什么如此困难的解释)
vector<auto> sample;
sample.push_back(5); // deduces to int
或类似
vector<typeStr> sample; //typestr using cin or some other run time component
答案 0 :(得分:1)
这是行不通的,您需要亚型多态性,但是模板提供的参数多态性与您的目的不符,std::vector<T>
和带有std::vector<U>
的{{1}}是两种完全不同的类型。
您可能具有多态数据类型,例如:
T != U
或具有虚拟方法的复杂数据类型,但这会降低性能。或者,您可以将模板参数移到更高的级别,例如:
union DataType
{
int i;
double d;
};
std::vector<DataType> values;
否则,最好的选择是将template<typename T>
void process()
{
std::vector<T> sample;
sample.push_back(whatever);
/* process */
}
包装为另一种类型,该类型可以提供您所需的多态性。
我想知道您的确切问题是什么,因为这可能是XY问题。