C++多类型数组

C++ multiple type array

本文关键字:数组 多类型 C++      更新时间:2023-10-16

是否可以在C++中创建多个不同类型的有序元组的数组?例如,我希望能够制作一个元组数组,其中每个元组包含一个 int、一个字符串和一个双精度?所以像这样:

  vector<pair<pair<int, string>, double> >;

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

数组是相同大小对象的系统排列。在 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;

c++ 中的向量将具有相同类型的所有元素。另一种方法是具有 vector s 的vector,但同样,内部向量的元素必须是相同的类型。

可能你试图

解决的问题会比你试图实现的问题有更好的解决方案。有一个丑陋且绝对不明智的解决方案 - 使用vector<vector<void*> >但这既危险又不可维护。

如果只有一组给定类型的元素,则创建一个抽象类型,该抽象类型具有所有类型的实现。例如,定义MyType并在 MyTypeIntMyTypeDoubleMyTypeString 中继承它。然后声明一个vector<vector<MyType*> >,例如,(更好的是使用scoped_array或类似的东西而不是内部向量)。

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

所以我已经在研究这个名为 Nile 的仅标题项目。它以C++完成特定任务。https://github.com/LUCIF680/Nile

#include"nile.h"
Array y = {50,70.2,"ram"};

它还包含几个功能从推送,弹出等。目前它只支持int,long,double,long double,float,std::string,const char*