如何在 base class 中将默认构造函数设为私有?
How to make default constructor private in base class?
我想有一个 class 当我们从它继承时使其他 class 单例,所以我写了这个:
template <typename Class,
typename T = std::enable_if<std::is_class_v<Class>>>
struct singleton
{
public:
static Class* get_instance(void)
{
if (!object)
{
object = new Class;
}
return object;
}
protected:
static Class* object;
singleton(void) = default;
private:
singleton(const singleton&) = delete;
singleton& operator=(const singleton&) = delete;
};
template <typename Class, typename T>
Class* singleton<Class, T>::object{nullptr};
这就是我的使用方式:
struct some_base_class : public singleton<some_base_class>
{
private:
size_t m_variable;
public:
static auto make(const size_t var)
{
auto o{singleton<some_base_class>::get_instance()};
o->m_variable = var;
return o;
}
};
但这里 some_base_class
不是单例,因为在 singleton
class 中我们将默认构造函数设为受保护成员,我试图将其设为私有成员,但出现此错误:
use of deleted function ‘some_base_class::some_base_class()’
为什么?我只是将其设为基 class 中的私有成员并将其标记为 = default
而不是 = delete
!我怎样才能在基 class 中将默认构造函数设为私有?
看起来这个错误是指你的参数化构造函数
已标记删除...
如果可以,请使用 class 而不是结构,因为在默认情况下,如果您未指定 public 或受保护的所有成员,则所有成员都是私有的...
How to make default constructor private in base class?
您可以使用访问说明符:
struct base {
private: // this here
base() = default;
i got this error:
use of deleted function ‘some_base_class::some_base_class()’
Why ?
因为您试图默认初始化派生的 class。
并且因为基类的默认构造函数是私有的,所以删除了派生类型的隐式生成构造函数。这是因为无法访问构造函数,无法构造基。
我想有一个 class 当我们从它继承时使其他 class 单例,所以我写了这个:
template <typename Class,
typename T = std::enable_if<std::is_class_v<Class>>>
struct singleton
{
public:
static Class* get_instance(void)
{
if (!object)
{
object = new Class;
}
return object;
}
protected:
static Class* object;
singleton(void) = default;
private:
singleton(const singleton&) = delete;
singleton& operator=(const singleton&) = delete;
};
template <typename Class, typename T>
Class* singleton<Class, T>::object{nullptr};
这就是我的使用方式:
struct some_base_class : public singleton<some_base_class>
{
private:
size_t m_variable;
public:
static auto make(const size_t var)
{
auto o{singleton<some_base_class>::get_instance()};
o->m_variable = var;
return o;
}
};
但这里 some_base_class
不是单例,因为在 singleton
class 中我们将默认构造函数设为受保护成员,我试图将其设为私有成员,但出现此错误:
use of deleted function ‘some_base_class::some_base_class()’
为什么?我只是将其设为基 class 中的私有成员并将其标记为 = default
而不是 = delete
!我怎样才能在基 class 中将默认构造函数设为私有?
看起来这个错误是指你的参数化构造函数 已标记删除... 如果可以,请使用 class 而不是结构,因为在默认情况下,如果您未指定 public 或受保护的所有成员,则所有成员都是私有的...
How to make default constructor private in base class?
您可以使用访问说明符:
struct base {
private: // this here
base() = default;
i got this error:
use of deleted function ‘some_base_class::some_base_class()’
Why ?
因为您试图默认初始化派生的 class。
并且因为基类的默认构造函数是私有的,所以删除了派生类型的隐式生成构造函数。这是因为无法访问构造函数,无法构造基。