使用 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_type
s .因此,添加另一组大括号:
Foo test(
{{"", []() {}}}
);
或者为了更清晰起见,这样写:
Foo test{
// Element list under here
{
// One element here
{"", []() {}}
}
};
生成的 std::initializer_list
可以被复制(虽然其中的东西不会被复制)所以你的 "forwarding" 工作得很好。
我从来没有真正能够使用 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_type
s .因此,添加另一组大括号:
Foo test(
{{"", []() {}}}
);
或者为了更清晰起见,这样写:
Foo test{
// Element list under here
{
// One element here
{"", []() {}}
}
};
生成的 std::initializer_list
可以被复制(虽然其中的东西不会被复制)所以你的 "forwarding" 工作得很好。