std::<key-value>不同类型的对向量
std::vector of <key-value> pairs with different types
我正在尝试创建一个小型接口函数并将其发送到JSON格式化程序类。 JSON 仅适用于(无限的(键值对,但值可以(仅(:string, int, bool
现在我有:
struct Data
{
std::vector<std::pair<std::string, int64_t>> intData;
std::vector<std::pair<std::string, std::string>> strData;
std::vector<std::pair<std::string, bool>> boolData;
};
void func(const Data& data);
但我不太喜欢它(Data
中有 3 个几乎相似的结构(,也许有更好的C++方法。
对我来说,理想情况下是有一些(模板化(更干净的东西并像这样工作:
// pseudocode, I know that it does not work
struct Data
{ // AnyType = string, int or bool
std::vector<std::pair<std::string, AnyType>> data;
};
// or better
using Data = std::vector<std::pair<std::string, AnyType>> data;
Data data;
data.add("int value", 1);
data.add("string value", "str");
data.add("bool value", false);
func(data);
谢谢
LE:我正在使用C++11,不幸的是不能使用其他标准。
我想到的一个解决方案是使用std::variant
来获取编译时多态性,即:
std::vector< std::pair<std::string, std::variant<int64_t, std::string, bool>>>;
使用类型别名:
using json_val = std::variant<int64_t, std::string, bool>;
std::vector< std::pair<std::string, json_val>>;
关于 json 和整体方法的说明:
如果不需要对类型进行中间区分,或者可能无法使用变体,则对所有值类型仅使用std::string
可能会更简单。因为它是json,这可能是有意义的,因为json数据格式没有像int64_t
这样的类型,即。JSON只有用字符串表示的数字。 (然后通过解析来识别这一点,我认为您正在尝试将其建模为中间格式(。
相关文章:
- 如何创建从同一类继承的不同对象的向量
- C++中函数的向量返回类型引发错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 在 C++ 中输出枚举类类型的向量元素
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 具有 STL 向量类型成员的类的复制内存
- 将不同类型的变量添加到向量中
- std::<key-value>不同类型的对向量
- 如何以"union-like"方式更改C++向量的数据类型
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 返回字符串和不同向量数据类型的映射C++
- 如何确定传递给模板函数的向量的类型
- 向量的向量不同类型
- 调用函数时,如何通过向量返回类型
- 更改成员向量的类型
- Int模板中的数组/向量/其他类型
- 与我定义的类的成员有关的c++向量数据类型编译器错误问题
- 从boost mpl向量注册类型