我正在考虑在const和非const类方法上使用this question。首选答案取自Scott Meyers的Effective C++,其中非const方法以const方法实现。从const和非const方法中移除返回迭代器的代码重复
进一步扩展,如果方法返回迭代器而不是引用,如何减少代码复制?修改链接的问题的例子:
class X
{
std::vector<Z> vecZ;
public:
std::vector<Z>::iterator Z(size_t index)
{
// ...
}
std::vector<Z>::const_iterator Z(size_t index) const
{
// ...
}
};
我无法实现非const方法,const的方法方面,因为它不可能直接从常量性转换为迭代器不使用的距离()/advance()技术。
在这个例子中,因为我们使用std :: vector作为容器,实际上可能从const_iterator转换为迭代器,因为它们很可能被实现为指针。我不想依赖这个。有更通用的解决方案吗?
该函数要么是微不足道的或应该被实现为一个算法函数模板,使成员函数再次平凡无奇。 – ipc
在这种情况下,这两个函数都可以是'return vecZ.begin()+ index'。或者,如果你绝对必须让它们不同,那么const版本可以是'return vecZ.cbegin()+ index'。看起来,没有重复! –