[問題] 模版類別方法回傳this型態可依子類別改變?

看板C_and_CPP (C/C++)作者 (Irake)時間12年前 (2014/03/25 19:31), 編輯推噓4(406)
留言10則, 4人參與, 最新討論串1/1
發生問題的程式碼貼在:http://paste.plurk.com/show/1835767 在此例子中,父類別內processing()會回傳(*this),也就是 父類別自己的型態,即使子類別繼承了父類別,在子類別內的 processing(),依然只能回傳父類別的型態。 當然,可以在子類內使用overriding,再重寫一個屬於自己 的processing()也是可行的,但會造成重覆的程式碼,降低 維護性。 請教各位高手,是否可以讓父類別processing()內的return *this, 在被繼承後,子類別的processing()可以真正的"回傳自己", 而不再是父類別型態? 感恩。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.85.5.246 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1395747108.A.9D8.html

03/25 19:58, , 1F
查prototype pattern或clone
03/25 19:58, 1F

03/25 20:01, , 2F
若是怕重覆程式碼,可用Curiously recurring template pattern
03/25 20:01, 2F

03/25 20:15, , 3F
你只要傳回 reference/pointer 就可以了
03/25 20:15, 3F

03/25 20:47, , 4F
推二樓的作法, 應該這就是原 PO 想要的了
03/25 20:47, 4F

03/25 20:48, , 5F
To 三樓, 回傳 ref/pointer 依然是父類別, 不能使用子類別的
03/25 20:48, 5F

03/25 20:49, , 6F
東西, 這應該才是原 PO 的問題所在...
03/25 20:49, 6F
謝謝高手們相助,我試著用CRTP,但可能是概念不足,還是沒有成功; 可否請教以目前這個例子,具體而言可以怎麼實作呢? 看到許多範例都有用到static_cast,不知這個例子上是否適用。 ※ 編輯: irake 來自: 219.85.5.246 (03/25 22:19)

03/25 22:35, , 7F
你是想要d1 copy給d2,還是d2是d1的reference ?
03/25 22:35, 7F
d1 copy to d2 ^_^ ※ 編輯: irake 來自: 219.85.5.246 (03/25 22:55)

03/25 23:26, , 8F
03/25 23:26, 8F

03/25 23:28, , 9F
不過你的 processing 怪怪的. 可能不是我想的
03/25 23:28, 9F
感謝kwpn大大! 這個方法繼承一層有效,第二層就不行,但已足夠。 請問覺得processing()怪怪的是指什麼呢? 由您的code,我學到不少,再次感恩。 ※ 編輯: irake 來自: 219.85.5.246 (03/26 00:27)

03/28 19:20, , 10F
子類別的傳回值可以 co-variance 但 T 必須 in-variance
03/28 19:20, 10F
文章代碼(AID): #1JCMaadO (C_and_CPP)
文章代碼(AID): #1JCMaadO (C_and_CPP)