首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同类型的<key-value>对的std::vector

不同类型的<key-value>对的std::vector
EN

Stack Overflow用户
提问于 2020-06-18 19:38:03
回答 1查看 370关注 0票数 0

我正在尝试创建一个小的接口函数,并将其发送到一个JSON格式化程序类。JSON只能处理(无限制的)键-值对,但值可以是(仅):string, int, bool

现在我有了:

代码语言:javascript
复制
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++方式。

对我来说,理想的情况是拥有一些(模板化的)干净的东西,并像这样工作:

代码语言:javascript
复制
// 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,不幸的是不能使用其他标准。

EN

回答 1

Stack Overflow用户

发布于 2020-06-18 19:45:12

出现在脑海中的一个解决方案是使用std::variant来获得编译时的多态性,即:

代码语言:javascript
复制
std::vector< std::pair<std::string, std::variant<int64_t, std::string, bool>>>;

具有类型别名

代码语言:javascript
复制
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只有用字符串表示的数字。(然后通过解析来识别这一点,我认为您正在尝试将其建模为中间格式)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62449141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档