Получить тип значения std :: map, который передается в функцию шаблона

Наличие функции шаблона —

template <class B>
B getValue (B& map) {
// implementation ...
}

Для этой функции пройти map , лайк —

map<string,double> doubleMap;
getValue (doubleMap);

Так, например, в этом случае, если я хочу установить возвращаемое значение функции для double в соответствии с doubleMap Я должен извлечь value тип этого map Кроме того, если я хочу объявить на двойной (или любой другой тип в соответствии с переданной картой), я должен иметь это ..

Как я могу получить это?

2

Решение

std::map определяет типы членов key_type а также mapped_type,

Что вы хотите B::mapped_type, которые будут double в твоем случае.

5

Другие решения

Вы можете создать шаблон, который получает контейнер и экспортирует его аргументы типа с помощью typedef: (пример для общего поиска типа аргумента tamplate)

template <typename>
class GetTemplateArgs {};

template <typename ARG1, typename ARG2>
class GetTemplateArgs<std::map<ARG1,ARG2>>
{
public:
typedef ARG1 KEY;
typedef ARG2 DATA;
};

template <class B>
typename GetTemplateArgs<B>::DATA getValue (B& map) {
// implementation ...
}

И, конечно, вы можете сделать это более конкретным для карты, чтобы она получала только карту в качестве аргумента.

2

По вопросам рекламы [email protected]