推 CoNsTaR: 這個概念在電腦科學裡叫做 covariance 和 contravariance 10/01 11:26
→ CoNsTaR: 有一些語言的函數也可以分 super 和 sub 滿有趣的 10/01 11:26
推 CoNsTaR: 然後 variance 的概念告訴你哪個是哪個的 sub 或 super 10/01 11:29
→ CoNsTaR: 以及為什麼 super 不能轉 sub,但相反卻可以 10/01 11:29
→ CoNsTaR: super 就是你的 base 的意思,sub 就是 child 10/01 11:30
推 LPH66: NONONO, covariance / contravariance 是繼承鏈類別的衍生 10/01 18:48
→ LPH66: 出來的型別之間的關係, 這裡只是單純的父指標不能指子而已 10/01 18:49
→ LPH66: 以此例來說若談論 Base[] D1[] D2[] 的關係 10/01 18:49
→ LPH66: 或 vector<Base> vector<D1> vector<D2> 的關係 10/01 18:50
→ LPH66: 這才會用上 *-variance 這個用語 10/01 18:50
推 CoNsTaR: 指標應該可以看成是一個 type function 吧 10/01 21:34
→ CoNsTaR: 所以照 c++ 的寫法,D1* 應該可以想成是 *<D1> 之類的東 10/01 21:34
→ CoNsTaR: 西 10/01 21:34
→ CoNsTaR: 所以 *<B> 不能直接轉 *<D> 意思就是 B* 不能直接轉 D* 10/01 21:34
→ CoNsTaR: 至少我是這樣理解為什麼父指標不能直接轉子的 10/01 21:34
推 CoNsTaR: 喔喔 樓上的意思是只有衍生型別可以用 variance 嗎? 10/01 21:44
→ CoNsTaR: 那我就不知道了 XDD 10/01 21:44
→ CoNsTaR: 那如果兩個型別各自從不同型別衍生出來,他們比大小可以 10/01 21:44
→ CoNsTaR: 用 variance 這個詞嗎? 10/01 21:44
推 CoNsTaR: 或是如果我說,因為 * 是 covariant 所以 B* 不能轉 D*, 10/01 22:01
→ CoNsTaR: 這樣講正確嗎? 10/01 22:01
→ firose: variance 應該是用在繼承上的,在符合 LSP 的前提之下 10/01 22:57
→ firose: 對於函數的傳回值與參數,也可以有繼承關係上的變化 10/01 22:57
推 LPH66: 唔, 把 * 當成 type function 來講嗎... 10/02 08:02
→ LPH66: 倒是沒這麼思考過; 稍微想一想應該是可以的 10/02 08:02
→ LPH66: 這樣 * 這個 type function 確實能說是 covariant 10/02 08:03
推 Killercat: 其實我覺得你想到這case已經滿厲害的了 XD 10/02 23:58
→ Killercat: 寫一輩子c++都沒想過銜尾蛇 10/02 23:58