看板 C_and_CPP 關於我們 聯絡資訊
我想請問Modern C++ Design不了解的地方 在p279最後一行 到p280頁的第一行 說callback的type必須要一樣 不然會遇到More Effective C++的Item 31的問題 請問是什麼問題呢 因為手邊沒這本書 因為本來的想法是在p278底下那的sample code改成 typedef BasicDispatcher<Rectangle, Poly> Dispatcher; void HatchRectanglePoly(Rectangle& lhs, Poly&poly) 這樣就不用再作dynamic_cast了 但是發現書裡已經在下一節p279最底下有說不行了..... 第二個問題是 在p279中間的Go 為什麼不用operator[]找原本的callback呢?? 還要用iterator來一個一個找?? 第三個問題是 p279裡的Go的key是用Baselhs 跟Baserhs來找 但是p278裡的Add key是用Somelhs, Somerhs 這樣是不是會造成key不一樣的問題!? 是不是在p279上面的sample code那 disp.Add<Rectangle, Poly> 改成 disp.Add<Shape, Shape> 又或者是把Go改成像Add一樣的member template template <class Somelhs, class Somerhs> ResultType Go... 謝謝 ※ 編輯: allstarschh 來自: 220.130.135.229 (12/08 00:45)
diabloevagto:回答第二個問題 12/08 09:56
diabloevagto:iterator find ( const key_type& x ); 12/08 09:57
diabloevagto:這個是find的原型,要用iterator是為了接收find 12/08 09:57
Chikei:因為op []跟find對於找不到的情況contract不一樣 12/08 10:45
Chikei:第一個問題可能是在說fn ptr的參數型別是不會被implicitly 12/08 10:53
Chikei:cast回base class,所以對於callback map來說除了 12/08 10:54
Chikei:參數是base class的fn ptr以外都是不合法的 12/08 10:54
allstarschh:謝謝 但可以再請教Chikei 不合法的意思是?? 12/08 16:23
Chikei:不合語法,callback map的value type是 12/08 17:16
Chikei:ResultType (*)(BaseL&, BaseR&),但如果你要在map裡塞不同 12/08 17:18
Chikei:的型別,value type就會變成ResultType (*)(C&, D&) 12/08 17:19
Chikei:C繼承BaseLhs,D繼承BaseRhs,可是這種東西不會自動轉回 12/08 17:20
Chikei:原本callback map的ResultType (*)(BaseLhs&, BaseRhs&) 12/08 17:21
allstarschh:謝謝 了解了 12/09 00:25
※ 編輯: allstarschh 來自: 220.130.135.229 (12/09 11:41)