我正在为一个单元测试循环一些输入和输出字符串,我的第一次尝试是:
std::vector<std::pair<std::string, std::string>> pairs {{"input1", "output1"}, {"input2", "output2"}};
正如你所看到的那样,它非常冗长。我曾尝试使用auto
,但g ++抱怨嵌套的init列表。
如何简化?
我意识到这可能不是推荐的工作数据结构(例如你可以使用std::map
)我是出于纯粹的好奇而问这个。
答案 0 :(得分:1)
使用make_xxx
函数:它们的目的是通过从传递的参数中推导出它们的项类型来创建容器/包装器。
您必须创建make_vector
功能。这是a possible implementation (C++14)。
auto pairs = make_vector(
std::make_pair("input1", "output1"),
std::make_pair("input2", "output2")
)
或者,您只需使用using
使代码更具可读性:
using str_pair = std::pair<std::string, std::string>;
using vec_of_str_pair = std::vector<str_pair>;
vec_of_str_pair pairs {{"input1", "output1"}, {"input2", "output2"}};
这个问题很可能通过this proposal (N4471)来解决,enter link description here允许在构造函数中进行模板推导。
它允许您说出与std::vector<auto> v = ...
或std::pair<auto> p = ...
类似的内容,它将从容器的构造函数中推导出模板参数。