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继承的类的人.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |