我创建了一个单独的包装器模板类,它提供了instance()
成员函数,并且还应该断言单例类是否具有private
构造函数。定义如下:
template <
class T,
class = typename std::enable_if<!std::is_constructible<T>::value, void>::type
>
class singleton {
public:
static T& instance() {
static T inst;
return inst;
}
};
当我定义一个单独的类时:
class class_with_public_constr
: public singleton<class_with_public_constr> {
public:
class_with_public_constr() {}
friend class singleton<class_with_public_constr>;
};
代码传递enable_if
断言。我的singleton
课程模板出了什么问题?
答案 0 :(得分:3)
您可以按照以下方式简化代码,并在构造函数为public
时(即不是private
,protected
)
template<typename T>
class singleton
{
public:
// Below constructor is always invoked, because the wannabe singleton class will derive this class
singleton () {
static_assert(!std::is_constructible<T>::value, "the constructor is public");
}
static T& instance();
};
客户端类如下所示:
class A : public singleton<A>
{
friend class singleton<A>;
//public: // <---------- make it `public` & you get the error!
A() {}
};
这是demo。