0

我目前正在开发一个实体组件系统,在该系统中我需要为不同的组件类型创建唯一的 ID,最好不要在组件类中存储任何额外的数据(因为这需要静态虚拟方法,这些方法不起作用,并且所以每次比较某些东西时我都需要实例化一个新组件)。我最终采用的方法是创建一个模板化方法:

/*statically instances unique pointers for different
TComponents - each with their own templated instance*/

template<typename TComponent>
static const COMP_ID& GetTComponentID()
{
    DERIVES_FROM_COMPONENT_ASSERT;

    static COMP_ID ID = Component::NewID();
        
    return ID;
}   

然后在我的组件基类中有一个静态方法,每次在 GetTCompomponentID() 中初始化一个新的静态 COMP_ID 时,它都会返回一个唯一 ID:

//retrieves static data identifier

static const COMP_ID& NewID()
{
    static COMP_ID currID = 0; 
    currID++;

    return currID;
}

使用它,我可以为我使用的每个组件派生创建唯一的静态 ID,而无需将数据作为虚拟函数存储在类本身中(它不能是静态的,因此每次需要比较时都需要新实例)

除了静态方法成员使用的明显额外内存之外,使用这样的系统是否存在任何潜在问题?

-谢谢

4

0 回答 0