gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:48:04 25 4
gpt4 key购买 nike

我从来没有真正能够使用 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 value_type 的。因此,添加另一组大括号:

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

或者为了更清晰起见,这样写:

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

生成的 std::initializer_list 可以被复制(虽然它里面的东西不会被复制)所以你的“转发”工作得很好。

关于c++ - 使用 std::initializer_list 初始化类/结构内的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com