gpt4 book ai didi

c++ - 如何访问 Meyers 单例模式中的派生构造函数

转载 作者:太空狗 更新时间:2023-10-29 22:57:04 24 4
gpt4 key购买 nike

我的代码:

template<class T>
class Singleton {
public:
static T& instance() {
static T obj;
return obj;
}

protected:
Singleton() { }
Singleton(Singleton const& other);
void operator=(Singleton const& other);
};

class Derived : public Singleton<Derived> {
protected:
Derived() { }
};

void test() {
Derived::instance();
}

我在 static T obj 行收到此错误:

‘Derived::Derived()’ is protected  
Derived() { }
^

我该如何解决这个问题?也许使用 friend 关键字?但这会有点尴尬。

注意: 我知道 Meyers 单例的名称和想法,但我自己实现它的原因是我找不到我第一次阅读它的地方。我以为它在“Effective C++”或“More Effective C++”中,但我在那里找不到。而且我在网上找到的例子没有使用CRTP-generalization。

最佳答案

使 Singleton instance 函数成员成为 Derived 的友元:

struct Derived{
//...
friend Derived& Singleton<Derived>::instance();
};

关于c++ - 如何访问 Meyers 单例模式中的派生构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040154/

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