如何避免const和非const对象的操作符或方法的代码重复?

时间:2011-04-20 19:01:49

标签: c++ operators duplication

  

可能重复:
  How do I remove code duplication between similar const and non-const member functions?

我的任务是实现c ++ vector analogue。我为2个案例编写了operator []。

T myvector::operator[](size_t index) const {//case 1, for indexing const vector
    return this->a[index];   
} 
T & myvector::operator[](size_t index) {//case 2, for indexing non-const vector and assigning values to its elements
    return this->a[index];
}

如您所见,代码完全相同。这个例子(只有一个代码行)不是问题,但如果我需要为const和非const情况分别实现一些运算符或方法并分别返回const或引用值,我该怎么办?每次我对其进行更改时,只需复制粘贴所有代码吗?

1 个答案:

答案 0 :(得分:0)

这里const_cast的一些好用途。像往常一样写你的非const函数,然后像这样写你的const函数:

const T & myvector::operator[](size_t index) const {
    myvector<T> * non_const = const_cast<myvector<T> *>(this);
    return (*non_const)[index];
}