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