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,没有任何问题