[問題] Modern C++ Design的問題

看板C_and_CPP (C/C++)作者 (allstars)時間14年前 (2011/12/08 00:39), 編輯推噓0(0014)
留言14則, 3人參與, 最新討論串1/1
我想請問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)

12/08 09:56, , 1F
回答第二個問題
12/08 09:56, 1F

12/08 09:57, , 2F
iterator find ( const key_type& x );
12/08 09:57, 2F

12/08 09:57, , 3F
這個是find的原型,要用iterator是為了接收find
12/08 09:57, 3F

12/08 10:45, , 4F
因為op []跟find對於找不到的情況contract不一樣
12/08 10:45, 4F

12/08 10:53, , 5F
第一個問題可能是在說fn ptr的參數型別是不會被implicitly
12/08 10:53, 5F

12/08 10:54, , 6F
cast回base class,所以對於callback map來說除了
12/08 10:54, 6F

12/08 10:54, , 7F
參數是base class的fn ptr以外都是不合法的
12/08 10:54, 7F

12/08 16:23, , 8F
謝謝 但可以再請教Chikei 不合法的意思是??
12/08 16:23, 8F

12/08 17:16, , 9F
不合語法,callback map的value type是
12/08 17:16, 9F

12/08 17:18, , 10F
ResultType (*)(BaseL&, BaseR&),但如果你要在map裡塞不同
12/08 17:18, 10F

12/08 17:19, , 11F
的型別,value type就會變成ResultType (*)(C&, D&)
12/08 17:19, 11F

12/08 17:20, , 12F
C繼承BaseLhs,D繼承BaseRhs,可是這種東西不會自動轉回
12/08 17:20, 12F

12/08 17:21, , 13F
原本callback map的ResultType (*)(BaseLhs&, BaseRhs&)
12/08 17:21, 13F

12/09 00:25, , 14F
謝謝 了解了
12/09 00:25, 14F
※ 編輯: allstarschh 來自: 220.130.135.229 (12/09 11:41)
文章代碼(AID): #1EtvRLPU (C_and_CPP)
文章代碼(AID): #1EtvRLPU (C_and_CPP)