Получение типа значения в std :: map без знания ключа - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть карта с неизвестными типами ключей и значений, и я хочу определить 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 голосов
/ 12 сентября 2018

Если вы хотя бы знаете, что имеете дело с 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 вместо этого - метод шаблона выше также будет работать для шаблонов, которые не определяют ничего подобного.

...