我从来没有真正能够与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(
{"", []() {}}
);
有人可以告诉我应该如何编写此代码吗?
答案 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;工作得很好。