所以,我有一个简单的工作代码,例如
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;
}
问题:是否可以在不使用std::map
的情况下创建新的模板功能,但使用不同的容器(ex std::map
,{{} 1}},...),像这样:
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());
/* ... */
}
编译器给我一个错误:
main.cpp(119):错误C2664:'mapAt': 无法转换参数1 '的std ::地图&LT; _Kty,_Ty&GT;'至 “的std ::地图&LT; _Kty,泰 - &GT; ( _cdecl&amp;)'1&gt;
用1> [1> _Kty = int,1&gt; _Ty = char 1&gt; ] 1&gt;没有用户定义的转换 可执行的运营商 这种转换,或运营商 不能被称为
答案 0 :(得分:2)
你可以这样写:
template <class Container>
typename Container::mapped_type mapAt(Container& MyMap, typename const Container::key_type& key)
{
typename Container::const_iterator iter = MyMap.find(key);
return iter->second;
}
int main()
{
std::map<int, char> my_map;
char ch = mapAt(my_map, 123);
}