具有不同类型的多个矢量
Multiple vectors with different types
本文关键字:同类型 更新时间:2023-10-16
我正在尝试创建一个小型的概念验证数据库系统,该系统使用表来存储数据。"表"是列的集合。每列可以有不同的类型。每个表可以有任意数量的列。
理想情况下,我想要这样的东西:
class Table {
map<string, vector<T>> cols; //string is name of col, vector holds data
}
然而,向量的类型必须在编译时已知,所以我不能在同一个映射中有多个类型(向量int、向量double等)。
我需要吗:
class Table {
map<string, vector<int>> int_cols;
map<string, vector<double>> double_cols;
//etc...
}
对于我希望能够存储的每种类型
我觉得必须有更好的方法来做到这一点。
实际上C++不是管理动态类型的最佳选择。考虑向量的这个成员:
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 :-(");
}
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- CRTP 模式 但是在数据结构中存储非同构类型
- 私有结构(在类中定义)不能用作属于同一类的函数的返回类型吗
- C++ 管理多个同质数据类型
- 在同一行读取具有多个类型的文件
- C++对同一类类型的引用公开私有成员
- 在同一类中向前声明类型