好了,我现在有两个使用迭代器的类(完全无关,不同的项目)。一个具有预期的iterator和reverse_iterator,另一个具有iterator和半中断的const_iterator (具体地说,因为const_iterator派生自迭代器,所以代码LinkedList<int>::iterator i = const_list.begin()是有效的,并允许您修改const定义的列表...)。
我打算将所有四种类型都添加到这个类中。如果可以的话。
我如何继续最小化复制/粘贴代码并只更改返回类型?创建一个像base_iterator这样的基类来继承吗?创建一个iterator或const_iterator并继承它?继承自某个std::class?如果这些情况中的任何一种都是“最好的”方法,那么什么代码会去哪里呢?
也许没有一种替代方案是好的?我在这里完全迷路了,找不到太多的参考资料。
感谢任何建议,但请记住,我对这个主题(迭代器和C++,尤其是OOP)还是个新手。我试着研究了GCC附带的头文件,但徒劳无功--它们并不是我要找的教程。
发布于 2017-08-22 02:28:36
更具体的what maxim1000 suggested版本
#include <type_traits>
template<typename Container, bool forward>
class iterator_base
{
public:
using value_type =
typename std::conditional<std::is_const<Container>::value,
const typename Container::value_type,
typename Container::value_type>::type;
iterator_base() { }
// For conversions from iterator to const_iterator.
template<typename U>
iterator_base(const iterator_base<U, forward>& other)
: c(other.c)
{
// ....
}
value_type& operator*() const
{
// ...
}
iterator_base& operator++()
{
if (forward)
{
// ...
}
else
{
// ...
}
}
iterator_base& operator++(int)
{
iterator_base copy(*this);
++*this;
return copy;
}
private:
Container* c = nullptr;
// ...
};
using iterator = iterator_base<self_type, true>;
using const_iterator = iterator_base<const self_type, true>;
using reverse_iterator = iterator_base<self_type, false>;
using const_reverse_iterator = iterator_base<const self_type, false>;https://stackoverflow.com/questions/1776641
复制相似问题