在地图中使用std :: type_index作为值

tve*_*eeg 16 c++ constructor rtti typeinfo c++11

我想创建一个std::unordered_map,其中std::type_index.以下代码段有效:

std::unordered_map<std::type_index, int> workingMap;
workingMap[typeid(int)] = 1;
workingMap[typeid(char)] = 2;
Run Code Online (Sandbox Code Playgroud)

但是这个没有运行并抛出一个错误:

std::unordered_map<int, std::type_index> failingMap;
failingMap[1] = typeid(int);
failingMap[2] = typeid(char);
Run Code Online (Sandbox Code Playgroud)

CS2512:'std :: type_index :: type_index':没有合适的默认构造函数可用.

我不完全理解这个错误,这些例子中的构造函数之间有什么区别?是否有可能使一个地图,typeid(..)价值,而不是重点?

Ale*_*agh 19

问题是operator[],不是地图的实际使用.问题是,如果关键是没有找到,operator[]将指定一个默认值,并返回一个可修改的引用该值,这是不可能的std::type_index.您可以使用emplace,insert,try_emplace,或不需要默认构造函数的任何其他修改.