gpt4 book ai didi

c++ - 为派生类生成唯一 ID

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:53 33 4
gpt4 key购买 nike

我正在尝试编写一个基类和一组 N 个派生类,其中每个派生类都有自己唯一的标识符,这是一个简单的“手动”实现:

struct Base {
static int id_ = 0;
};

struct Derived1 : public Base {
static int id_ = 1;
};

struct Derived2 : public Base {
static int id_ = 2;
};

问题是,如果我想继续添加派生类,我必须统计已经存在的派生类的数量。

事情也变得更复杂了,因为我想用一个bitset来表示唯一的ID。如果每个派生类的唯一 ID 基本上只是将(公共(public)长度位集的)不同位设置为 1,则可以非常容易地对派生类组执行二进制 AND/OR/XOR/等操作。

以下是我想要的不完整且不正确的实现

//Let DCOUNT be the number of derived classes, Ideally I shouldnt have to ever
//know/think about what it evaluates too, it should be automatic.
//But that is second priority, I would be willing to #define this to
//some 'large' value, and not worry about it.
struct Base {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00000"
};

struct Derived1 {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00001"
};

struct Derived2 {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00010"
};

实现它的最佳方法是什么? (或类似的东西)

最佳答案

像一组函数(模板)这样为每种类型生成并保留一个 id 的简单东西怎么样,如下所示:

 template<typename T>
static std::bitset<DCOUNT> getId()
{
static std::bitset<DCOUNT> bitset;
static bool bitsetCreated = false;
if ( false == bitsetCreated )
{
bitset = generateUniqueID();
bitsetCreated = true;
}
return bitset;
}

之后你可以得到这样的ID:getId < YourType > ();它们是在运行时生成的,因此 generateUniqueID() 没有问题;

关于c++ - 为派生类生成唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991866/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com