我试图避免声明枚举或使用字符串。尽管这样做的理由似乎令人怀疑,但完整的解释是无关紧要的。
我的问题很简单。我可以使用成员变量的地址作为唯一 ID 吗?
更具体地说,要求是:
- ID 不必序列化。
- ID 将是受保护的成员 - 仅由拥有对象在内部使用(即使在相同的类实例之间也不会比较 ID)。
- 子类需要访问基类 ID,并且可以添加它们的新 ID。
所以第一个解决方案是这样的:
class SomeClass
{
public:
int mBlacks;
void AddBlack( int aAge )
{
// Can &mBlacks be treated as a unique ID?
// Will this always work?
// Is void* the right type?
void *iId = &mBlacks;
// Do something with iId and aAge
// Like push a struct of both to a vector.
}
};
而第二种解决方案是这样的:
class SomeClass
{
public:
static int const *GetBlacksId()
{
static const int dummy = 0;
return &dummy;
}
void AddBlack( int aAge )
{
// Do something with GetBlacksId and aAge
// Like push a struct of both to a vector.
}
};