加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在派生类中强制使用受保护的构造函数

发布时间:2020-12-16 03:38:26 所属栏目:百科 来源:网络整理
导读:是否有任何机制允许在派生类中强制执行受保护的构造函数? 简单的例子: templatetypename Tclass Factory;class Base { templatetypename T friend class Factory;protected: Base();};class Child : public Base {public: Child(); // this should lead to
是否有任何机制允许在派生类中强制执行受保护的构造函数?

简单的例子:

template<typename T>
class Factory;

class Base {
  template<typename T>
  friend class Factory;
protected:
  Base();
};


class Child : public Base {
public:
  Child(); // this should lead to a compile time error
};

<template T>
class Factory {
Base* GetNew()
{
  BOOST_STATIC_ASSERT(boost::is_base_of<Base,T>::value);

  Base* b = new T();
  b->doStuff();

  return b;
 }
};

所以我希望Child类只能由工厂创建,并强制所有从Base派生的子类都有一个受保护的构造函数.

解决方法

不,没有办法强制执行此操作.通常,基类在限制子类的方式上非常有限. Base不是,也不应该试图负责监管每个可能写过碰巧从Base继承的类的人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读