gpt4 book ai didi

c++ - 具有不同类型的多个 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:36 25 4
gpt4 key购买 nike

我正在尝试创建一个小型的概念验证数据库系统,该系统使用表来存储数据。 “表”是列的集合。每列可以有不同的类型。每个表可以有任意数量的列。

理想情况下,我想要这样的东西:

class Table {
map<string, vector<T>> cols; //string is name of col, vector holds data
}

但是,必须在编译时知道 vector 的类型,所以我不能在同一个映射中有多种类型(vector int、vector double 等)。

我需要:

class Table {
map<string, vector<int>> int_cols;
map<string, vector<double>> double_cols;
//etc...
}

对于我希望能够存储的每种类型?
我觉得必须有更好的方法来做到这一点。

最佳答案

实际上,C++ 并不是管理动态类型的最佳选择。考虑 vector 的这个成员:

reference operator[](size_type index);

如果类型不是静态解析的,返回值在二进制级别下如何解释?对于缺乏元类信息支持的语言,对于这样的问题没有优雅的通用解决方案。但是,如果您打算存储的值的类型是可枚举的,我可能建议您尝试 boost::any 或 boost::variant:

map<std::string, boost::any> cols;

当你必须获取一个值时,它看起来真的很糟糕:

if (cols[key].type() == typeid(std::vector<int>)) {
process(cols[key].any_cast<std::vector<int>>());
} else if (cols[key].type() == typeid(std::vector<double>)) {
process(cols[key].any_cast<std::vector<double>>());
}
...
} else {
throw std::runtime_error("Oops! Seems that I missed a type :-(");
}

关于c++ - 具有不同类型的多个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com