2010-09-17 48 views
1

这个优化问题一直困扰着我最后一天。游戏地图对象属性的位域与多态性

在我的程序中(一个简单的roguelike游戏),我使用按位标志来存储地图对象的属性,例如它们是否固定,或者是否渲染。不过,我可以用多态来完成这件事,以返回适当的值。

我的问题是,在链表循环中使用时,其中一种方式显着快于还是慢于另一种方式?另外,比另一个更好的做法是什么?

的代码的一个例子:

XMapObject *List = ListStart; 

while(List != NULL) 
{ 
    if(List->MapObjectFlags & MAPOBJECTFLAG_RENDER) 
     OR 
    if(List->Render()) 
    { 
     return List->Type; 
    } 
    else 
    { 
     List = List->Next; 
    } 
} 

bool XMapObject::Render() 
{ 
    return 1; 
} 

感谢。

+0

我认为,这是一个过早的优化,你正在做。 – n0rd 2010-09-17 09:52:42

+1

此外,您可以创建非vrtual内联Render()成员函数,该函数只需“返回MapObjectFlags&MAPOBJECTFLAG_RENDER”并使用它来代替隐式按位运算。然后,如果您决定切换到其他检查方法,则只需更改实施。 – n0rd 2010-09-17 09:56:17

+0

@ n0rd:这绝对是不成熟的,但这个问题一直困扰着我,因为我正在监督项目中一些较老的来源。 – 2010-09-17 14:39:38

回答

1

按位操作总是比虚拟函数调用更快。

+0

我这么认为。思考过后,它也更加灵活。 – 2010-09-17 02:16:05

+0

如果单个int(或用于存储的任何数据)的位数相当有限,它如何更灵活? – n0rd 2010-09-17 09:50:07

+0

比我原来的例子更具灵活性,它具有硬编码的回报。 – 2010-09-17 14:37:57