Итак, у меня был простой рабочий код, например
template <typename T, typename VALUE>
VALUE mapAt(T key)
{
std::map<T, VALUE>::const_iterator item_i(MyMap.find(key))
, end_i(MyMap.end());
if (item_i == end_i)
{
throw std::exception("No such key!");
}
return (*item_i).second;
}
Вопрос : возможно ли создать новую функцию template без использования std::map
, но с использованием других контейнеров (например, std::map
, std::multimap
, ...) примерно так:
template <class Container, typename T, typename VALUE>
VALUE mapAt(Container& MyMap, T key)
{
Container<T, VALUE>::const_iterator item_i(MyMap.find(key))
, end_i(MyMap.end());
/* ... */
}
Проблема : когда я пытаюсь его использовать, например:
std::map<int, char> my_map;
char ch = mapAt<std::map<int, char>(), int, char>(my_map, 123); // C2664 error
компилятор выдает мне ошибку:
main.cpp (119): ошибка C2664: 'mapAt':
невозможно преобразовать параметр 1 из
'std :: map <_Kty, _Ty>' в
'std :: map <_Kty, <em>Ty> ( _cdecl &)' 1>
с 1> [1>
_Kty = int, 1> _Ty = char 1>] 1> Нет пользовательских преобразований
оператор, который может выполнять
это преобразование или оператор
нельзя назвать