我有一個類A
和一個成員函數f
,即返回指向 實例的一些內容設計兩個等價成員函數返回一個const和非const指針到構件,分別
int* A::f() {
// common code ...
return &(this->some_container[some_index])
}
現在,我需要模擬功能,只返回一個指針const
, 即
const int* A::f_const() const {
// exactly the same lengthy code ...
return &(this->some_container[some_index]);
}
需要注意的是,隨着「冗長的代碼」不改變0123實例, 這也使得功能const
w.r.t.該實例(第二個 const
聲明)。
我的問題:現在我不知道是否有一些解決方案,以避免代碼 加倍,不使用第三個功能。
一方面,呼籲f
內f_const
將是非法的,因爲f
不 const
w.r.t.擁有的實例。另一方面,在f
內部調用f_const
將需要將const
指針轉換爲非const
指針,這也是不可能的。
有沒有優雅的聲明方法,避免代碼翻倍?
如所述,這裏使用具有f
和 f_const
共同功能的第三個功能是不是一種選擇,因爲當施加大量 功能,它將使碼的可讀性。
可能的重複[如何刪除類似的const和非const成員函數之間的代碼重複?](http://stackoverflow.com/questions/123758/how-do-i-remove-code-duplication-between -similar-const-and-non-const-member-func) – Rakete1111
你爲什麼要這樣做?人們永遠不會想到人們遇到的無窮無盡的C++問題。斯特勞斯特魯普博士從來沒有打算爲他的「語言」的「實際笑話」(只問他)作爲一個基礎來擺弄關於什麼機制可能導致某些意想不到的或無用的因素的副作用的哲學論證語義。當然,您可以將數據複製到靜態標量並返回其地址,該地址應該保持不變:-) –