C++ 如何在c++;

C++ 如何在c++;,c++,vector,types,C++,Vector,Types,我需要一个可以存储int、float、string、char或任何其他原始数据类型的向量 如何声明这样的数据类型 例如,如果我使用std::vector-vIntVectorvIntVector只能存储整数,不能存储std::string或浮点 另外,我没有C++11支持如果您已经知道可能的类型,您可以使用Boost.Variant。否则使用Boost.Any 如果你不能使用Boost,可能是因为它太大了,那么还是使用它吧 如果您仍然不想使用它,请查看它们的实现,从中学习,然后定义自己的类。如果

我需要一个可以存储int、float、string、char或任何其他原始数据类型的向量

如何声明这样的数据类型

例如,如果我使用
std::vector-vIntVector
vIntVector只能存储整数,不能存储std::string或浮点


另外,我没有C++11支持

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

如果你不能使用Boost,可能是因为它太大了,那么还是使用它吧


如果您仍然不想使用它,请查看它们的实现,从中学习,然后定义自己的类。

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

如果你不能使用Boost,可能是因为它太大了,那么还是使用它吧


如果您仍然不想使用它,请查看它们的实现,从中学习,然后定义您自己的类。

正如我所理解的,您只需要一个数组来存储不同类型的变量。不幸的是,在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)
struct变量{
枚举{INT,浮点,字节}类型;
联合{
整数;
浮点小数;
无符号字符字节;
};
Var(intv):类型(int),整数(v){}
Var(float v):类型(float),十进制(v){
Var(无符号字符v):类型(字节),字节(v){
};
...
std::载体arr;
arr.push_back(1);//推整数
arr.push_back(12.f);//推动浮子
arr.push_back('a');//Push字符(字节)

但是我建议你不要用这个。试着用其他方法来实现您所需要的。

好吧,正如我所理解的,您只需要一个数组来存储不同类型的变量。不幸的是,在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)
struct变量{
枚举{INT,浮点,字节}类型;
联合{
整数;
浮点小数;
无符号字符字节;
};
Var(intv):类型(int),整数(v){}
Var(float v):类型(float),十进制(v){
Var(无符号字符v):类型(字节),字节(v){
};
...
std::载体arr;
arr.push_back(1);//推整数
arr.push_back(12.f);//推动浮子
arr.push_back('a');//Push字符(字节)

但是我建议你不要用这个。试着想想其他方法来实现你所需要的。

你想要Boost.Variant或Boost.Any。这是一个奇怪的问题。你能做一个更简单的版本吗?比如,“我想要一个可以是任何类型的变量
x
”,以及用法示例?当然,我们不需要知道你是把东西粘成向量还是成对。@KerrekSB我编辑了这个问题。谢谢你的建议。另外,如果这个要求看起来有点不合常规,让我提一下,我正在编写一个解码器,并且消息(协议)有时有点模糊。我不确定他们将要发送的数组的数据类型是什么。因此,我需要准备好支持所有的原始类型。有人能解释一下为什么这个问题的票数很接近吗?@Wildling:这个问题仍然非常不清楚。切掉所有与向量和向量对无关的东西(我们相信你知道它们是什么),对你需要解决的核心问题做一个精简的、最少的描述。让核心问题的解决方案能够让你解决真正的问题,而不必告诉我们配对。你想要Boost.Variant或Boost.Any。这是一个奇怪的问题。你能做一个更简单的版本吗?比如,“我想要一个可以是任何类型的变量
x
”,以及用法示例?当然,我们不需要知道你是把东西粘成向量还是成对。@KerrekSB我编辑了这个问题。谢谢你的建议。另外,如果这个要求看起来有点不合常规,让我提一下,我正在编写一个解码器,并且消息(协议)有时有点模糊。我不确定他们将要发送的数组的数据类型是什么。因此,我需要准备好支持所有的原始类型。有人能解释一下为什么这个问题的票数很接近吗?@Wildling:这个问题仍然非常不清楚。切掉所有与向量和向量对无关的东西(我们相信你知道它们是什么),对你需要解决的核心问题做一个精简的、最少的描述。让核心问题的解决方案能够让你解决真正的问题,而不告诉我们关于配对的情况。如果你不能使用Boost,因为它太大了,那么仍然使用它。让我笑了。谢谢,这正是我想要的。如果你不能使用Boost,因为它太大了,那么还是使用它。让我笑了。谢谢,这正是我想要的。