C++ 游戏地图对象属性的位域与多态性
这个优化问题在最后一天一直困扰着我 在我的程序(一个简单的类似流氓的游戏)中,我使用位标志来存储贴图对象的属性,例如它们是实体还是渲染。但是,我可以使用多态性来返回适当的值 我的问题是,当在链表循环中使用时,这两种方法是明显快还是慢?还有,一种做法比另一种好吗 代码示例如下:C++ 游戏地图对象属性的位域与多态性,c++,optimization,polymorphism,bit-manipulation,bit-fields,C++,Optimization,Polymorphism,Bit Manipulation,Bit Fields,这个优化问题在最后一天一直困扰着我 在我的程序(一个简单的类似流氓的游戏)中,我使用位标志来存储贴图对象的属性,例如它们是实体还是渲染。但是,我可以使用多态性来返回适当的值 我的问题是,当在链表循环中使用时,这两种方法是明显快还是慢?还有,一种做法比另一种好吗 代码示例如下: XMapObject *List = ListStart; while(List != NULL) { if(List->MapObjectFlags & MAPOBJECTFLAG_RENDER)
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;
}
谢谢。按位操作总是比虚拟函数调用快。按位操作总是比虚拟函数调用快。我想是的。仔细想想,它也更灵活了。如果单个
int
(或用于存储的任何内容)中的位数非常有限,它怎么可能更灵活呢?比我原来的示例更灵活,它有硬编码的返回。我想是这样的。仔细想想,它也更灵活。如果单个int
(或用于存储的任何内容)中的位数非常有限,它怎么可能更灵活?比我原来的示例更灵活,它有硬编码返回。我认为,这是一个过早的优化。此外,您还可以创建非虚拟内联Render()成员函数,该函数将简单地返回MapObjectFlags&MAPOBJECTFLAG\u Render
,并使用它代替隐式逐位操作。然后,如果您决定切换到另一种检查方法,您只需更改实现。@n0rd:这肯定是不成熟的,但问题一直困扰着我,因为我在项目中管理一些较旧的源代码。我认为,您正在进行的优化是不成熟的。您还可以创建非虚拟内联渲染()成员函数,该函数将简单地返回MapObjectFlags&MAPOBJECTFLAG_RENDER
,并使用它代替隐式按位操作。然后,如果您决定切换到另一种检查方法,您只需更改实现。@n0rd:这肯定是不成熟的,但这个问题一直困扰着我,因为我正在管理项目中的一些旧资源。