繁体   English   中英

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

[英]Initialize a container inside a class/struct with std::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(
    {"", []() {}}
);

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

基本上,这只是错字。

您只在initializer_list中提供了一个value_type ,但应该是value_type列表 因此,添加另一组花括号:

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

或这样写,以提高清晰度:

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

可以复制生成的std::initializer_list (尽管其中的内容不会被复制),因此您的“转发”效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM