使用 std::initializer_list 在 class/struct 中初始化容器

Initialize a container inside a class/struct with std::initializer_list

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

#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(
    {"", []() {}}
);

谁能告诉我这段代码应该怎么写?

这基本上只是一个打字错误。

您只在 initializer_list 中提供了一个 value_type,但它应该是 list of value_types .因此,添加另一组大括号:

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

或者为了更清晰起见,这样写:

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

生成的 std::initializer_list 可以被复制(虽然其中的东西不会被复制)所以你的 "forwarding" 工作得很好。