在不知道键的情况下在std :: map中获取值的类型

时间:2018-09-11 23:27:10

标签: c++ dictionary reflection stdmap c++03

我有一个键和值类型未知的映射,并且我想在不事先知道键类型的情况下确定值类型的typeid(...).name()

 std::map<K, V> aMap;
 // This gives me the typeid(...).name(), but requires knowing the key type
 typeid(aMap[0]).name();

有什么方法可以在不知道typeid(...).name()是什么类型的情况下为V获取K吗?

应注意,我仅限于C ++ 03;但是,如果有办法在C ++ 11或更高版本中做到这一点,那真是太好了。

1 个答案:

答案 0 :(得分:7)

假设您至少知道要处理的内容是std::map,则可以使用模板函数或多或少直接获取键和值类型:

#include <iostream>
#include <string>
#include <map>

template <class T, class U>
std::string value_type(std::map<T, U> const &m) {
    return typeid(U).name();
}

int main() { 
    std::map<int, std::string> m;

    std::cout << value_type(m);
}

std::string打印的实际字符串是由实现定义的,但是至少这可以为您提供旨在表示该类型的内容,而无需将其硬编码为value_type或类似的内容

std::map的特定情况下,您可以改用mapped_type -上面的模板方法也适用于未定义类似内容的模板。