Наличие функции шаблона —
template <class B>
B getValue (B& map) {
// implementation ...
}
Для этой функции пройти map
, лайк —
map<string,double> doubleMap;
getValue (doubleMap);
Так, например, в этом случае, если я хочу установить возвращаемое значение функции для double
в соответствии с doubleMap
Я должен извлечь value
тип этого map
Кроме того, если я хочу объявить на двойной (или любой другой тип в соответствии с переданной картой), я должен иметь это ..
Как я могу получить это?
std::map
определяет типы членов key_type
а также mapped_type
,
Что вы хотите B::mapped_type
, которые будут double
в твоем случае.
Вы можете создать шаблон, который получает контейнер и экспортирует его аргументы типа с помощью 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 ...
}
И, конечно, вы можете сделать это более конкретным для карты, чтобы она получала только карту в качестве аргумента.