我希望拥有如下表格的C ++表示形式:
0 1 2
= = =
1 1.0 a
2 2.0 b
3 3.0 c
必须在运行时从int
,double
或string
中选择列的类型。
用C ++表达它的最佳方法是什么?
附录:我的真正问题:我想要一个数据库表的列式表示,它可以有任意的SQL类型(我会满足int
,double
和string
)
答案 0 :(得分:3)
编辑:在运行时创建动态类型的对象,谷歌"工厂模式"。
您需要第一个向量包含一致的类型,因此您可能(在C ++中)希望拥有一个基类并从中派生。我不确定std :: vector类是否有一个无类型的基础(可能)。
所以,你要么围绕一个向量的概念创建一个包装类(yuck),你要创建一个变量类型的向量(yuck),或者你创建一种变量向量(yuck)。我可能会选择后者,因为它是最简单的方法,它仍然具有类型安全向量。
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;
和品尝季节。但亲爱的上帝啊,它太可怕了。这是用户定义的数据库表的运行时表示吗?
答案 1 :(得分:2)
可能有记录/行类:
struct Record
{
int col1;
double col2;
string col3;
}
std::vector<Record> records;