很抱歉,如果我的英语或我的编码约定不好。
std :: list是STL列表
我正在尝试根据他的选择创建一个将std::list<>::iterator
和std::list<>::reverse_iterator
无缝地用于用户的库。
首先,我不想实现所有std::list<>::iterator
方法。所以我会把它们继承到我的班级:
template <class realIter> class directedListTypeIter : public realIter
用户将使用2个可能的模板实例化directedListTypeIter:
directedListTypeIter<std::list<value>::iterator>
directedListTypeIter<std::list<value>::reverse_iterator>
这意味着我应该创建以下赋值运算符(或复制构造函数):
directedListTypeIter& operator=(std::list<value>::reverse_iterator &constructorIter) {
((std::list<value>::reverse_iterator*)this)->operator=(constructorIter);
return *this;
}
directedListTypeIter& operator=(std::list<value>::iterator &constructorIter){
((std::list<value>::reverse_iterator*)this)->operator=(constructorIter);
return *this;
}
我需要所有这些赋值运算符用于以下函数实现和其他类似的实现。
directedListTypeIter begin(std::list<value>& userList){
directedListTypeIter<realIter> retVal;
if (someCheck()){
retVal = userList.begin();
} else {
retVal = userList.rbegin();
}
return retVal;
}
换句话说 - 为了实现begin()函数和我需要的其他类似函数,我应该实现赋值运算符(或复制构造函数)。
以下是我的问题:
我。所有这些都取决于“value”结构的存在和用法。如何删除此依赖项?
II。如果我有更多可能的继承类型,我应该为每种类型创建新的赋值运算符(或复制构造函数)吗?是不是模板编程意味着不复制该代码?如何在不将代码复制到每个操作符的情况下进行相同操作?
III。我应该添加以下内容:
directedListTypeIter& operator=(realIter &constructorIter){
((realIter*)this)->operator=(constructorIter);
return *this;
}
会编译 - 不添加列出所有可能的继承值的内容吗?
谢谢。
P.S。本主题是关于如何模板化继承,而不是在一个接口中实现两种迭代器类型的使用。我的意思是 - “C ++标准库列表”用例只是一个更好地解释我的问题的例子。