c++ - C++ - 如何保留一些类对象仅由某个类实例化
问题描述
我正在定义一个unique_id_generator 类,它有点像单例,即给定的type_id 只有一个实例。可以有许多不同的 type_id,但对于特定的 type_id,只有一个实例。现在我想确保 type_id = 0 进入一个非常具体的类。基本上只有特定的类可以使用 type_id = 0 ,然后其余的可以自由使用。我想知道通过哪种设计模式可以确保发生这种情况?我不想控制或管理一般给出的 type_ids。仅供参考,我已经在使用私有构造函数来阻止类的不受保护的实例化。
我无法控制谁先实例化 unique_id_generator。同样基于设计,我不想通过获取 type_id = 0 的特定类来路由对唯一 ID 的请求。
非常感谢任何想法/建议。
解决方案
我能想到的唯一解决方案是定义 2 个实例化方法。一公一私如下:
#define EXCLUSIVE_CNT 1
class UniqueID
{
public:
friend class MySpecialClass;
static UniqueID * GetInstance(int type_id)
{
assert(type_id >= EXCLUSIVE_CNT);
return Instantiate(type_id);
}
private:
int type_id_;
int seq_id_;
std::map<type_id, UniqueID*> type_to_obj_map_;
UniqueID(int type_id)
{
type_id_ = type_id;
seq_id_ = 0;
}
static UniqueID * GetExclusiveInstance(int type_id)
{
assert(type_id < EXCLUSIVE_CNT);
return Instantiate(type_id);
}
static UniqueID * Instantiate(int type_id)
{
if(type_to_obj_map_.find(type_id) == type_to_obj_map_.end())
{
type_to_obj_map_[type_id] = new UniqueID(type_id);
}
return type_to_obj_map_[type_id];
}
};
推荐阅读
- flask - 烧瓶棉花糖超链接相关字段查询参数
- mongodb - 使用预加载数据的 mongodb 实例创建 docker 映像
- winapi - 为什么 setdibits 在 masm 组装中失败
- c++ - 在同一输出流中调用时,我的动态链接队列不正确地输出三个返回函数
- c# - 带有正则表达式替换的特殊符号
- apache-nifi - NiFi如何释放流文件直到下游流程完成
- swiftui - ScrollView 的 SwiftUI 动画
- python - 正则表达式:匹配字符串开头以外的字符
- sql - 合并语句不插入数据
- angular - Angular:将文本输入值绑定到文本区域内的子字符串