如何在C++; 我希望有一个表的C++表示,如: 0 1 2 = = = 1 1.0 a 2 2.0 b 3 3.0 c

如何在C++; 我希望有一个表的C++表示,如: 0 1 2 = = = 1 1.0 a 2 2.0 b 3 3.0 c,c++,vector,stl,C++,Vector,Stl,在运行时,必须从int、double或string中选择列的类型 在C++中最好的表达方式是什么?< /P> 附录:我真正的问题是:我想要一个数据库表的列表示,它可以有任意的SQL类型(我会选择int、double和string)。可能有一个记录/行类: struct Record { int col1; double col2; string col3; } std::vector<Record> records; struct记录 { int col1

在运行时,必须从
int
double
string
中选择列的类型

在C++中最好的表达方式是什么?< /P>
附录:我真正的问题是:我想要一个数据库表的列表示,它可以有任意的SQL类型(我会选择
int
double
string
)。

可能有一个记录/行类:

struct Record
{
    int col1;
    double col2;
    string col3;
}

std::vector<Record> records;
struct记录
{
int col1;
双col2;
字符串col3;
}
病媒记录;

可能有记录/行类:

struct Record
{
    int col1;
    double col2;
    string col3;
}

std::vector<Record> records;
struct记录
{
int col1;
双col2;
字符串col3;
}
病媒记录;

编辑:要在运行时创建动态类型的对象,请使用谷歌“工厂模式”

您需要第一个向量来包含一致的类型,因此(在C++中)可能希望有一个基类并从中派生。我不确定std::vector类是否有非类型化的基(可能)

因此,您要么围绕向量的概念创建一个包装类(恶心),要么创建一个变体类型的向量(恶心),要么创建一个某种变体向量(恶心)。我可能会选择后者,因为它是最简单的方法,其中仍然包含类型安全向量

typedef union VectorOfThings {
    std::vector<int> i;
    std::vector<double> d;
    std::vector<string> s;
};
struct TypedVectorOfThings {
    enum Type { ints, doubles, strings };
    Type type;
    VectorOfThings myVector;
};
std::vector<TypedVectorOfThings > myVectorOfVectors;
typedef事物的联合向量{
std::向量i;
std::载体d;
std::向量s;
};
结构类型事件{
枚举类型{int,double,strings};
类型;
事物的向量myVector;
};
std::vector myvectorof vectors;

并根据口味调味。但是,天哪,这太可怕了。这是用户定义的数据库表的运行时表示还是什么?

编辑:要在运行时创建动态类型的对象,请使用google“factory模式”

您需要第一个向量来包含一致的类型,因此(在C++中)可能希望有一个基类并从中派生。我不确定std::vector类是否有非类型化的基(可能)

因此,您要么围绕向量的概念创建一个包装类(恶心),要么创建一个变体类型的向量(恶心),要么创建一个某种变体向量(恶心)。我可能会选择后者,因为它是最简单的方法,其中仍然包含类型安全向量

typedef union VectorOfThings {
    std::vector<int> i;
    std::vector<double> d;
    std::vector<string> s;
};
struct TypedVectorOfThings {
    enum Type { ints, doubles, strings };
    Type type;
    VectorOfThings myVector;
};
std::vector<TypedVectorOfThings > myVectorOfVectors;
typedef事物的联合向量{
std::向量i;
std::载体d;
std::向量s;
};
结构类型事件{
枚举类型{int,double,strings};
类型;
事物的向量myVector;
};
std::vector myvectorof vectors;

并根据口味调味。但是,天哪,这太可怕了。这是用户定义的数据库表的运行时表示还是什么?

您可以使用
boost::variant
,但我知道您的设计有什么问题。请描述您真正的问题。或者,只是一个想法,您可以使用
stoi
stod
等将字符串存储在向量中,并从字符串中读取/写入整数/双倍数。您可以使用
boost::variant
,但我不知道您的设计有什么问题。请描述您真正的问题。或者,只是一个想法,您可以使用
stoi
stod
等将字符串存储在向量中,并从字符串中读取/写入整数/双倍数。在这种方法中,无法在运行时选择类型。但是如果OP可以放弃这个需求,那么这是最简单的解决方案。在这种方法中,类型不能在运行时选择。但是,如果OP可以放弃该要求,那么这是最简单的解决方案。
这是用户定义的数据库表的运行时表示还是什么?
准确地说。
这是用户定义的数据库表的运行时表示还是什么?
准确地说。