c ++唯一的持久化类标识符

时间:2014-04-19 10:56:44

标签: c++ protocol-buffers uid

目标:

我有许多派生类(后面可能会有其他派生类)存储在树结构中,我想将每个类序列化为一个protobuffer,然后加密二进制数据(由SerializetoArray提供)。 但是每个类都应该用不同的密钥加密。很明显,如果我想解密它,我需要知道哪个密钥用于加密。

问题:

是否有一种简单的方法可以为每个类分配一个唯一的整数,以便在每个系统(Linux,MacOS,Windows等)和每个类的实例上运行时间的数字相同? (如果类获得版本更新,它也不应该改变。)

一个明显的解决方案是手动定义一个数字,但稍后这将是不切实际的,因为我希望这些派生类中的许多将由社区设计,因此几乎不可能保证它们的唯一性

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

这是我的两分钱:

为每个类添加一个静态const成员变量,并带有所需的值。

这样,同一个类的每个实例将始终具有相同的值。 类似的东西:

class MyClassA
{
   static const int myVal = 1;
public:
   inline myVal() const { return myVal; }
}

class MyClassB
{
   static const int myVal = 2;
public:
   inline myVal() const { return myVal; }
}

为了避免重复的值,您可以创建例如从枚举中分配它们。