在运行时使用字符串确定向量类型

时间:2018-12-24 01:18:58

标签: c++11 c++17

我试图在运行时使用字符串设置向量或元组的类型。我可以使用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

1 个答案:

答案 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问题。