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
{
//...
}
我有一个模板 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
{
//...
}