生成类唯一的ID的有效方法?

Pau*_*nta 8 c++ algorithm performance

在C++中是否有任何有效的方法来生成类的唯一ID,而不是实例?我正在寻找这种简单程度的东西(这会为每个实例生成一个ID,而不是为每个类类型生成一个ID):

MyClass::MyClass()
{
    static unsigned int i = 0;
    id_ = i++;
}
Run Code Online (Sandbox Code Playgroud)

编辑:为什么我想要唯一的ID.

我正在写一个游戏.我游戏中的所有实体都会有不同的状态(左转,跳跃,站立等); 这些状态在类中定义.每个州都需要拥有自己的ID,以便我可以识别它.

Pet*_*der 14

你可以试试这个,但这不是确定性的.

int id_count = 0;

template <typename T>
int get_id()
{
    static int id = id_count++;
    return id;
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

get_id<int>(); // etc.
Run Code Online (Sandbox Code Playgroud)

当然,这不是线程安全的.

同样,它不是确定性的:在您第一次为每种类型调用函数时生成ID.所以,如果在一次运行中你在另一次运行get_id<int>()之前调用,get_id<float>()那么你会反过来调用它们然后它们会有不同的ID.但是,它们在单次运行中对于每种类型始终是唯一的.

  • @Paul:就你的代码的C++部分而言,没有人从你的类中派生出来.你不关心C++; 问题的解决方案取决于您的脚本语言,以及它如何与现有的C++代码进行交互. (2认同)

Nem*_*emo 1

使用您MyClass作为原语,并将其静态实例合并到您想要 ID 的每个类中。

class MyOtherClass1 {
    static MyClass id;
};

class MyOtherClass2 {
    static MyClass id;
};

[etc.]
Run Code Online (Sandbox Code Playgroud)