作者Arton0306 (Ar藤)
看板C_and_CPP
标题[问题] virtual动态多型与手工转型+bit field
时间Tue Oct 27 15:16:38 2015
一个开发多年的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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1445930201.A.FD6.html
※ 编辑: Arton0306 (220.130.177.154), 10/27/2015 15:17:18
1F:推 littleshan: 手动实作vtable 10/27 15:36
2F:→ littleshan: 你可以把这些不同type的vtable存在一个阵列中 10/27 15:36
3F:→ littleshan: 然後用 obj->type 当作 index,查出对应的 vtable 10/27 15:37
4F:→ Arton0306: 多谢 ! 10/28 20:15