初始化静态boost::unordered_map
Initializing a static boost::unordered_map
我的应用程序中有一些静态unordered_maps,我希望能够在启动时进行初始化。他们不是班级的一部分。在我的初始设置中,头文件和源文件如下所示:
namespace Game
{
namespace Elements
{
enum Element
{
Air = 1,
Dark = 2,
Earth = 4,
Elementless = 8,
Fire = 16,
Ice = 32,
Light = 64,
SpaceTime = 128,
Thunder = 256,
Water = 512,
};
static boost::unordered_map<Element, std::string> ElementNameMap;
static boost::unordered_map<std::string, Element> NameElementMap
}
}
和源文件:
#include "Elements.h"
using namespace std;
using namespace Game::Elements;
boost::unordered_map<Element, std::string> ElementNameMap = boost::assign::map_list_of
(Element::Air, string("Air"))
(Element::Dark, string("Dark"))
(Element::Earth, string("Earth"))
(Element::Elementless, string("Elementless"))
(Element::Fire, string("Fire"))
(Element::Ice, string("Ice"))
(Element::Light, string("Light"))
(Element::SpaceTime, string("SpaceTime"))
(Element::Thunder, string("Thunder"))
(Element::Water, string("Water"))
;
boost::unordered_map<std::string, Element> NameElementMap = boost::assign::map_list_of
(string("Air"), Element::Air)
(string("Dark"), Element::Dark)
(string("Earth"), Element::Earth)
(string("Elementless"), Element::Elementless)
(string("Fire"), Element::Fire)
(string("Ice"), Element::Ice)
(string("Light"), Element::Light)
(string("SpaceTime"), Element::SpaceTime)
(string("Thunder"), Element::Thunder)
(string("Water"), Element::Water)
;
然而,每当我尝试这样做,然后试图做地图上的查找(即Game::Elements::NameElementMap[std::string("Air")])它总是返回一个空字符串,在使用上下文中的大小是0。
我尝试将初始化移动到头文件中(即在头文件中放置
)static boost::unordered_map<Element, std::string> ElementNameMap = boost::assign::map_list_of
(Element::Air, string("Air"))
(Element::Dark, string("Dark"))
(Element::Earth, string("Earth"))
(Element::Elementless, string("Elementless"))
(Element::Fire, string("Fire"))
(Element::Ice, string("Ice"))
(Element::Light, string("Light"))
(Element::SpaceTime, string("SpaceTime"))
(Element::Thunder, string("Thunder"))
(Element::Water, string("Water"))
;
static boost::unordered_map<std::string, Element> NameElementMap = boost::assign::map_list_of
(string("Air"), Element::Air)
(string("Dark"), Element::Dark)
(string("Earth"), Element::Earth)
(string("Elementless"), Element::Elementless)
(string("Fire"), Element::Fire)
(string("Ice"), Element::Ice)
(string("Light"), Element::Light)
(string("SpaceTime"), Element::SpaceTime)
(string("Thunder"), Element::Thunder)
(string("Water"), Element::Water)
;
但是编译器抱怨没有默认构造函数。我做错了什么?
thanks in advance
必须将定义放在正确的名称空间中。否则,您将在全局命名空间中定义两个新映射,而不是Game::Elements
:
namespace Game {
namespace Elements {
boost::unordered_map<Element, std::string> ElementNameMap = boost::assign::map_list_of
(Air, string("Air"))
(Dark, string("Dark"))
...
}
}
(另外枚举不创建新的命名空间,所以它只是Air
,而不是Element::Air
)
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶