gpt4 book ai didi

c++ - 命名空间中的 unordered_map 不是 "saving"它跨源文件的数据

转载 作者:行者123 更新时间:2023-11-28 04:09:32 25 4
gpt4 key购买 nike

我有一个命名空间,里面有一个 std::unordered_map 但数据没有在不同的包含源文件之间保存。比方说,如果我将数据添加到一个源文件中的 map 并想转到另一个源文件以读取 map 中的此数据,则 map 完全是空的。如果我检查填充 map 的源文件中的 map ,它会发现数据非常好。

这是我的命名空间:

namespace Command {
using Verb = std::function<
void(
DexunClientClass&,
SleepyDiscord::Message&,
std::queue<std::string>&
)
>;

struct Command {
std::string name;
std::vector<std::string> params;
std::string description;
Verb verb;
};
using MappedCommands = std::unordered_map<std::string, Command>;
using MappedCommand = MappedCommands::value_type;
static MappedCommands all;
static void addCommand(Command command) {
all.emplace(command.name, command);
}
}

添加到的无序映射是“MappedCommands all”

以及我如何在另一个源文件中添加到它的示例:

Command::addCommand(command); // command was defined earlier.

如果我转到另一个源文件并尝试像这样访问它:

Command::all

那么无序映射完全是空的。

我期望 map 将填充由一个源文件添加到 map 的数据,在另一个文件中是相同的,但它是空的。

最佳答案

您所观察到的是意料之中的。每个翻译单元都有自己的静态变量实例。这就是静态的意思(在命名空间范围内)。请注意,在这种情况下,static 关键字不会影响存储持续时间类。在任何一种情况下,存储持续时间都是静态的。 static 关键字影响变量的链接。

如果你想让所有的翻译单元共享同一个变量,那么你需要让它成为非静态的。在这种情况下,请注意静态初始化顺序的失败。

关于c++ - 命名空间中的 unordered_map 不是 "saving"它跨源文件的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118643/

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