为每个节点定义一个唯一的整数

问题描述:

我正在制作一个C++应用程序来存储有关产品的数据,每个产品都有一个唯一的整数ID,有没有办法做到这一点?为每个节点定义一个唯一的整数

我已经为产品这类节点,但我不知道如何使ID唯一:

class Node{ 
public: 
    int ID; 
    int cost; 
    int quantity; 
    string Name; 

Node(){ID=0; cost=0;quantity=0; Name="";} 

}; 
+2

不确定问题在问什么。你是否在寻求生成独特ID的方法?如果是这样,这是一个单一的机器应用程序,还是你需要生成多个机器上唯一的整数?这些ID是否需要是整数? ID需要支持哪些其他属性?你问是否有办法告诉C++(通过类型系统)该ID需要对每个对象唯一吗? – Rajiv

使用一个静态变量:

Node(){ 
static int id = 0; 
ID=id; 
id++; 
cost=0; 
quantity=0; 
Name="";} 

而且,我会用而不是int

另一种想法: 为了使代码具有持久性和线程安全性,每次创建节点时都会在文件上写入最后一个ID。当程序启动时,该文件将在另一个singleton类的构造函数中首先被读取。最后,这个类将保护用互斥锁生成ID的方法。

有几种方法可以做到这一点。一种方法就是在您的类所在的头文件中有一个全局变量,用于定义ID,并在分配每个ID之后递增。但是,许多人尽可能少地使用全局变量 - 当你不期待它们时,它们很容易被修改。

更好的方法是创建一个不同的类(我们称之为NodeManager),它有一个跟踪当前ID的成员变量,每次请求一个新的ID时递增成员变量,并且必须传递进入构造函数Node

稍微更简洁一些的方法也可以避免全局变量,那就是使用静态变量。静态变量在类的所有实例中都是相同的,因此您可以使用它来跟踪当前的ID。