如何简化变量

时间:2015-12-24 11:45:12

标签: c++11

我正在为一个单元测试循环一些输入和输出字符串,我的第一次尝试是:

std::vector<std::pair<std::string, std::string>> pairs {{"input1", "output1"}, {"input2", "output2"}};

正如你所看到的那样,它非常冗长。我曾尝试使用auto,但g ++抱怨嵌套的init列表。

如何简化?

我意识到这可能不是推荐的工作数据结构(例如你可以使用std::map)我是出于纯粹的好奇而问这个。

1 个答案:

答案 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 = ...类似的内容,它将从容器的构造函数中推导出模板参数。