std库地图和模板功能

时间:2015-04-14 16:46:15

标签: c++ dictionary

我真的不明白为什么这段代码

#include <map>

template<typename T, typename U> std::ostream& operator<<(std::ostream& o,
        const std::map<T,U>& input)
{
    for (std::map<typename T,typename U>::iterator it=input.begin(); it!=input.end(); ++it)
    {
        o << it->first << " => " << it->second << '\n';
    }
    return o;
}

返回此编译错误:

error: wrong number of template arguments (1, should be 4)
error: provided for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

您应该在迭代器声明之前编写typename并使用const_iterator:

for (typename std::map<T,U>::const_iterator it=input.begin(); it!=input.end(); ++it

运算符的参数&lt;&lt;需要const对象。所以地图的元素必须是const。要实现这一点,需要使用const_iterator。 迭代器声明中的typename需要指示以下表达式是嵌套模板类,具体取决于类型T和U.

另见这个问题: Making sense of arguments to a function template