[問題] virtual動態多型與手工轉型+bit field

看板C_and_CPP作者 (Ar藤)時間8年前 (2015/10/27 15:16), 8年前編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
一個開發多年的codebase 裡面留有非常非常多的 switch (obj->type) { case type1: ... case type2: ... (手工static向下轉型處理) } 看到這裡當然會想著為什麼不用virtual來做 只是又想到個問題 這個obj的數量數以百萬計 如果用virtual 那多出來一個指向vt的指標對大量的小物件而言是很貴的 在此codebase中 obj的type是用bit field來節省空間 想問的是 在極大量的小物件 想作動態多形 而且一定要避免空間浪費 除了手工轉型+bit field 有什麼更好的實作方式嗎? compiler有沒有可能提供option讓virtual的內部實作是用bit field來記type? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.177.154 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1445930201.A.FD6.html ※ 編輯: Arton0306 (220.130.177.154), 10/27/2015 15:17:18

10/27 15:36, , 1F
手動實作vtable
10/27 15:36, 1F

10/27 15:36, , 2F
你可以把這些不同type的vtable存在一個陣列中
10/27 15:36, 2F

10/27 15:37, , 3F
然後用 obj->type 當作 index,查出對應的 vtable
10/27 15:37, 3F

10/28 20:15, , 4F
多謝 !
10/28 20:15, 4F
文章代碼(AID): #1MBoJP_M (C_and_CPP)