2011-04-20 34 views
2

可能重複:
How do I remove code duplication between similar const and non-const member functions?如何避免運算符或方法對const和非const對象的代碼重複?

我的任務是實現C++的矢量模擬。我已經爲2個運算符[]編碼。

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或引用值,我應該怎麼做?每次我對其進行更改時,只需複製粘貼所有代碼?

+2

爲什麼你要在const版本中返回值。你可以返回一個const引用。 – 2011-04-20 19:05:30

回答

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]; 
} 
+1

這有效地擊敗了'const'。這與任何使用一樣糟糕。 – Potatoswatter 2011-04-20 19:08:21

+0

@Patatoswatter:當然它擊敗了const。這是它的目的。 – 2011-04-20 19:10:19

+0

文章編輯:爲了複製這個問題的答案,你需要在非const方法中將*強制轉換爲* const。這種方式是非法的。 – Potatoswatter 2011-04-20 19:12:18