使用std :: initializer_list初始化类/结构内的容器

时间:2018-02-24 21:14:02

标签: c++ initializer-list

我从来没有真正能够与std::initializer_list合作,我想改变它。所以我试图做这个非常简单的事情,即转发初始化列表以初始化struct成员。我尝试了很多东西,但有一个例子:

#include <unordered_map>
#include <functional>

struct Foo
{
    using U_Func = std::function<void()>;
    using U_MapFunc = std::unordered_map<std::string, U_Func>;

    U_MapFunc  funcMap;

    Foo(std::initializer_list<U_MapFunc::value_type> mapParams)
        : funcMap(mapParams)
    {}
};

Foo test(
    {"", []() {}}
);

有人可以告诉我应该如何编写此代码吗?

1 个答案:

答案 0 :(得分:3)

这基本上不过是一个错字。

您只在initializer_list中提供了一个value_type,但它应该是Foo test( {{"", []() {}}} ); 列表。所以,添加另一组括号:

Foo test{
    // Element list under here
    {
        // One element here
        {"", []() {}}
    }
};

或者这样写它是为了更加清晰:

std::initializer_list

生成的<link href="data:image/x-icon;base64,AAABAAEAEB8AAA==" rel="icon" type="image/x-icon" /> 可以被复制(虽然里面的东西不会被复制),所以你的转发&#34;工作得很好。