Bee*_*ope 8 c++ iterator const const-iterator
假设我正在实现一个集合,例如std::vector。我需要实现iterator和const_iterator,但是一旦完成,iterator就const_iterator不能仅实现为iterator<const T>(T集合中的类型在哪里)?
一定有原因为什么它不起作用,因为有上百万个问题有关如何在实现时重用代码iterator,const_iterator但是没有一个说“仅const T作为类型使用”。
std::iterator_traits<Iter>::value_type应该是T,const_iterator<T>但是const T1是iterator<const T>。如果您使用iterator<const T>as const_iterator<T>,则必须违反这些假设之一。
只要值类型的常量是与迭代器的常量不同的模板参数,就应该可以对两个迭代器使用通用模板。就像是:
template<class T>
struct container
{
template<class ItPtr>
struct iterator_common
{
using value_type = T;
using pointer = ItPtr;
using reference = std::remove_pointer_t<ItPtr>&;
// ...
};
using iterator = iterator_common<T*>;
using const_iterator = iterator_common<const T*>;
// ...
};
Run Code Online (Sandbox Code Playgroud)
1直到C++20,其中应该是std::remove_cv_t<const T>which T。因此,这对您在未来标准版本中的建议不会有问题。