gpt4 book ai didi

c++ - 具有多重继承的单例

转载 作者:行者123 更新时间:2023-12-04 12:28:01 25 4
gpt4 key购买 nike

我一直试图找到一个单例实现,其中:

  • 我可以上课Application这是抽象的
  • 并且可以有多个派生自 Application 的类。 ,例如 SampleApplicationOtherSampleApplication .
  • 但我只想要一个 Application 的实例,无论实际类型是什么,所以我一直试图使它成为单例。

  • 这是我当前的单例实现:
    template<class T>
    class Singleton
    {
    public:
    static T& GetInstance()
    {
    static T instance;
    return instance;
    }

    Singleton(Singleton const&) = delete;
    Singleton(Singleton&&) = delete;
    Singleton& operator=(Singleton const&) = delete;
    Singleton& operator=(Singleton&&) = delete;

    protected:
    Singleton() = default;
    virtual ~Singleton() = default;
    };
    然后,对于派生类,我尝试了很多事情:
  • class Application : public Singleton<Application>class SampleApplication : public Application这将不起作用,因为我们正在尝试创建一个 Application实例而不是 SampleApplication .
  • class Application : public Singleton<Application>class SampleApplication : public Application, public Singleton<SampleApplication>这不会编译,因为 GetInstance()是模棱两可的。我试图用 virtual 解决这个问题继承但无法编译。
  • class Applicationclass SampleApplication : public Application, public Singleton<SampleApplication>不符合我上面列出的“要求”,因为我们可以有另一个派生类的另一个单例。

  • 有谁知道实现这一目标的方法?

    最佳答案

    由于您提到您将解决运行时错误:

    template<class T>
    class Singleton : private ReallySingleton {
    单例的其余部分保持原样。私有(private)基类将是这样的:

    class ReallySingleton {

    static int counter=0;

    protected:
    ReallySingleton()
    {
    if (++counter > 1)
    throw std::runtime_error{"Too many singletons"};
    }
    };
    ( ReallySingleton::counter 需要在方便的地方定义)

    关于c++ - 具有多重继承的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056392/

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