Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::initializer\u list初始化类/结构中的容器_C++_Initializer List - Fatal编程技术网

C++ 使用std::initializer\u list初始化类/结构中的容器

C++ 使用std::initializer\u list初始化类/结构中的容器,c++,initializer-list,C++,Initializer List,我从未真正能够使用std::initializer\u list,我想改变这一点。所以我试着做一件非常简单的事情,就是转发初始化列表来初始化一个结构成员。我尝试了很多东西,但有一个例子: #include <unordered_map> #include <functional> struct Foo { using U_Func = std::function<void()>; using U_MapFunc = std::unordere

我从未真正能够使用
std::initializer\u 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(
    {"", []() {}}
);
#包括
#包括
结构Foo
{
使用U_Func=std::function;
使用U_-MapFunc=std::无序的U-map;
U_MapFunc funcMap;
Foo(std::初始值设定项\u列表映射参数)
:funcMap(mapParams)
{}
};
Foo试验(
{"", []() {}}
);

有人能告诉我应该如何编写这段代码吗?

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

您在初始值设定项列表中只提供了一个
value\u type
,但它应该是
value\u type
s的列表。因此,添加另一组大括号:

Foo test(
  {{"", []() {}}}
);
或者这样写以增加清晰度:

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

由此产生的
std::initializer\u list
可以被复制(尽管里面的东西不会被复制),所以你的“转发”工作正常。

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

您在初始值设定项列表中只提供了一个
value\u type
,但它应该是
value\u type
s的列表。因此,添加另一组大括号:

Foo test(
  {{"", []() {}}}
);
或者这样写以增加清晰度:

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

由此产生的
std::initializer\u list
可以复制(尽管里面的东西不会被复制),因此您的“转发”工作正常。

像“有人能告诉我应该如何编写此代码?”这样的问题很快就会被关闭。这个页面就是您想要的一切。@liliscent:该页面上的任何内容都不会指出代码中的错误。@liliscent嗯,我本来不想保留这个问题;)@LightnessRacesinOrbit我也在期待它会如此愚蠢,以至于它会有一些我没有找到的副本或类似的东西。@LightnessRacesinOrbit别担心,我一直在搜索,直到duckduckgo给我的链接不相关,甚至直接出现在Stackoverflow上。那只是一种感觉;)像“有人能告诉我该如何编写代码”这样的问题很快就会解决。这个页面就是您想要的一切。@liliscent:该页面上的任何内容都不会指出代码中的错误。@liliscent嗯,我本来不想保留这个问题;)@LightnessRacesinOrbit我也在期待它会如此愚蠢,以至于它会有一些我没有找到的副本或类似的东西。@LightnessRacesinOrbit别担心,我一直在搜索,直到duckduckgo给我的链接不相关,甚至直接出现在Stackoverflow上。那只是一种感觉;)似乎第一个版本不适用于VS,这就是我有点迷路的原因(是的,我删除了太多的括号用于示例抱歉!)似乎第一个版本不适用于VS2017中的VS,没有问题似乎第一个版本不适用于VS,这就是我有点迷路的原因(是的,我在示例中删除了太多的括号,对不起!)看起来第一个版本在VS2017中不适用于VS Works for me,没有任何问题