3
我的代码:如何访问派生构造函数迈尔斯单例模式
‘Derived::Derived()’ is protected
Derived() { }
^
我该如何解决这个问题:
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
行收到此错误?也许使用friend
关键字?但那会有点尴尬。
注意:我意识到Meyers单身人士的名字和想法的原因,但是我自己实现它,是因为我无法找到我第一次阅读它的地方。我认为这是在“有效的C++”或“更有效的C++”,但我无法在那里找到它。我在网上找到的例子并没有使用CRTP泛化。
的Singleton模式已经被遗弃了自己的创造者以后。你应该避免使用它。迈耶斯不是作者之一。 – Ron
这确实不是最好的主意。只需从CppCon2016(https://www.youtube.com/watch?v=23xDn3ReH7E)这5分钟的视频,这是有趣和有益的! (命名空间是singleton [extensible]) – Oliv