→ LPH66:加一個 private 的 T& A::real_f() const 寫實作如何? 05/10 02:26
推 loveme00835:寫實作+1, 包起來應該就可以了 05/10 02:42
→ firose:不可能 (最多只有一部份可以重用) 05/10 07:33
→ firose:原因很簡單. const 不會改變成員, non-const 會改變. 05/10 07:34
推 avhacker:你去看 vector 怎麼實做兩種 begin() 就知道了. 做兩份吧 05/10 10:54
→ tomap41017:看看effective C++ 3rd有提到..利用const_cast 05/10 12:08
推 tomap41017:不好意思沒看到最後第二行,不過我想是可行的 05/10 12:10
→ tomap41017:抱歉手上沒書@"@ 05/10 12:10
→ tinlans:non-const 版本只有物件本身不是 const 才會 call 進去, 05/10 13:03
→ tinlans:所以在裡面怎樣 const_cast 都是 safe 的。 05/10 13:03
→ tinlans:non-const 可以寫 const_cast<const A *>(this)->f(); 05/10 13:03
→ tinlans:呼叫 const 版本。 05/10 13:04
→ tinlans:而 f 傳回 const reference 的話, 05/10 13:04
→ tinlans:non-const 的版本也能放心的用 const_cast 拔掉 const。 05/10 13:05
→ tinlans:至於是否能夠只實作一份,這取決於是否兩個版本都是唯讀。 05/10 13:08
→ tinlans:如果兩個版本都不會修改 data member,只實作 const 版本 05/10 13:08
→ tinlans:就好了。 05/10 13:08
→ CrBoy:感謝!我剛剛已經閱讀過Effective C++ 3rd的條款三了, 05/13 02:09
→ CrBoy:與tinlans所提供的方法是一樣的,也符合我的需求,謝謝!:) 05/13 02:10