C++ - 如何保留一些 class 对象仅由某个 class 实例化

C++ - How to reserve some class objects to only be instantiated by a certain class

我正在定义一个 unique_id_generator class,这是一种单例,即给定的 type_id 只有一个实例。可以有许多不同的 type_id,但对于特定的 type_id,只有一个实例。 现在我想确保 type_id = 0 转到非常具体的 class。基本上就是那个特定的 class 可以使用 type_id = 0 然后其余的可以自由使用。 我想知道通过哪种设计模式可以确保发生这种情况? 我不想控制或管理一般给出的 type_ids。 仅供参考,我已经在使用私有构造函数来阻止 class.

的未受保护的实例化

我无法控制谁先实例化 unique_id_generator。同样基于设计,我不想通过获取 type_id = 0.

的特定 class 路由对唯一 ID 的请求

非常感谢thoughts/advice。

我能想到的唯一解决方案是定义2个实例化方法。一个public和一个私人如下:

#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];
    }
};