如何在c ++中使用泛型向量

时间:2013-11-12 11:24:34

标签: c++ vector types

我需要一个可以存储int或float或者字符串或char或其他任何原始数据类型的向量。

如何声明这样的数据类型?

例如,如果我使用std::vector<int> vIntVector; vIntVector只能存储整数,而不能存储std :: string或浮点数。

P.S。我没有C ++ 11支持

2 个答案:

答案 0 :(得分:10)

如果您已经知道可能的类型,则可以使用Boost.Variant。否则使用Boost.Any

如果你不能使用Boost,可能是因为它太大了,那么仍然使用它!

如果您仍然不想使用它,请参阅它们的实现,向它们学习,然后定义自己的类。

答案 1 :(得分:1)

好吧,据我所知,你只想要一个数组来存储不同类型的变量。不幸的是,在C ++中没有简单的方法。我可以建议你以下解决方案。

struct Var{
   enum {INT, FLOAT, BYTE} type;
   union{
      int integer;
      float decimal;
      unsigned char byte;
   };
   Var(int v):type(INT), integer(v){}
   Var(float v):type(FLOAT), decimal(v){}
   Var(unsigned char v):type(BYTE), byte(v){}
};

...
std::vector<Var> arr;
arr.push_back(1); // Push integer
arr.push_back(12.f); // Push float
arr.push_back('a'); // Push char(byte)

但我建议你不要使用它。试着考虑其他方式来实现你需要的东西。