C++ - A Class 模板成员的定义

C++ - Definition of A Member of A Class Template

我有一个模板 class listmap,其中有一个名为 iterator 的成员。

template <typename Key, typename Value, class Less = xless<Key>>
class listmap {
public:
   class iterator;
   //...
}

迭代器的定义超出列表映射如下,

template <typename Key, typename Value, class Less = xless<Key>>
class listmap<Key, Value, Less>::iterator {
//...
}   

less为模板class用于对比,

template <typename Type>
struct xless {
   bool operator() (const Type& left, const Type& right) const {
      return left < right;
   }
};

我只是运行一个简单的测试,看看它是否有效,但它给了我这个错误

cannot add a default template argument to the definition of a member of a class template

我对模板的理解很浅。为什么我不能在此处 iterator 的定义中使用 xless

listmap 的 class 声明中,您为最后一个模板类型(即 class Less = xless<Key>)提供了默认值。

在你的定义中iterator你又指定了默认值,去掉它。

template <typename Key, typename Value, class Less>
//                                      ^^^^^^^^^^
class listmap<Key, Value, Less>::iterator
{
    //...
}