C++;多类型数组 是否可以在C++中创建一个不同类型的多个有序元组数组?例如,我希望能够创建一个元组数组,其中每个元组包含一个int、一个string和一个double?比如: vector<pair<pair<int, string>, double> >; 向量;

C++;多类型数组 是否可以在C++中创建一个不同类型的多个有序元组数组?例如,我希望能够创建一个元组数组,其中每个元组包含一个int、一个string和一个double?比如: vector<pair<pair<int, string>, double> >; 向量;,c++,arrays,C++,Arrays,有了这个,我可以得到一个元组(2,“3”,5.43)。 这里的问题是,通常我事先不知道元组的大小。因此,它可能只有两个元素,或五个元素,或三个元素,如示例中所示,以及所有不同的类型。而且顺序也可能不同。是否有可能在C++中做类似的事情,或者我必须切换到Python?< P> >代码> C++ > /Calp>中的向量将具有相同的所有元素。另一种方法是将向量设置为向量s,但同样,内部向量的元素必须为相同类型 也许你试图解决的问题比你试图解决的问题有更好的解决方案。有一种丑陋且绝对不可取的解决方案-

有了这个,我可以得到一个元组(2,“3”,5.43)。
这里的问题是,通常我事先不知道元组的大小。因此,它可能只有两个元素,或五个元素,或三个元素,如示例中所示,以及所有不同的类型。而且顺序也可能不同。是否有可能在C++中做类似的事情,或者我必须切换到Python?

< P> >代码> C++ > /Calp>中的向量将具有相同的所有元素。另一种方法是将
向量
设置为
向量
s,但同样,内部向量的元素必须为相同类型

也许你试图解决的问题比你试图解决的问题有更好的解决方案。有一种丑陋且绝对不可取的解决方案-使用
向量
,但这既危险又无法维护

如果只有一组给定类型的元素,那么创建一个抽象类型,该类型具有所有这些类型的实现。例如,定义
MyType
并在
MyTypeInt
MyTypeDouble
MyTypeString
中继承它。然后声明一个
向量
,例如(最好使用一个作用域数组或类似的东西,而不是内部向量)


编辑:根据nijansen的评论,如果boost可用,您可以创建boost.Variant的向量。

数组是对象的系统排列(大小相同)。在C/C++中,不能创建可变大小元素的数组

但是,您可以使用多态性来激活它

创建抽象类型指针的数组,并根据其类型强制转换数组元素

例如:

namespace Array {
    enum Type  {
        Type1T,
        Type2T,
    };

    class AbstractType {
        public:
            virtual Type GetType() = 0;
            virtual ~AbstractType() {} 
    };

    class Type1 : public AbstractType  {
        public:
            Type GetType() { return Type1T;}

            int a;
            string b;
            double c;
    }; 

    class Type2 : public AbstractType  {
        public:
            Type GetType() { return Type2T;}

            int a;
            string b;
            string c;
            double d; // whatever you want
    };
}
并根据需要创建多个不同类型的数组

vector<Array::AbstractType*>  my_array;
向量my_数组;

所以我已经在做这个只有标题的项目,名为Nile。这是C++中的特定任务。

它还包含推送、弹出等多种功能。
目前它只支持int、long、double、long-double、float、std::string、const-char*

如果您事先不知道类型,那么您将如何编写代码,而不考虑存储?我知道可能的类型,只是不知道在这个元组中有多少类型以及它们的顺序。您需要关心大小吗?元组不允许任何您想要的大小吗?您可以使用结构(struct)来声明您的三元组。然后做一个std::vector@darxsys如果只在运行时确定,您可能必须求助于类似于
std::vector
?如果Boost libs可用,那么肯定是比void*更好的解决方案
#include"nile.h"
Array y = {50,70.2,"ram"};