是否有任何机制允许在派生类中强制执行受保护的构造函数?
简单的例子:
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继承的类的人.