【发布时间】:2020-06-18 11:38:02
【问题描述】:
我正在尝试创建一个小型接口函数并将其发送到 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::int64_t, std::string, bool>呢? -
您也可以考虑使用
std::any。 -
感谢大家的想法,尤其是@Evg。不幸的是我被 C++11 困住了,我会编辑我的帖子,所以
std::variant不是一个选项:(