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

Chr*_*ris 6 c++ inheritance

是否有任何机制允许在派生类中强制执行受保护的构造函数?

简单的例子:

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;
 }
};
Run Code Online (Sandbox Code Playgroud)

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

Sne*_*tel 4

不,没有办法强制执行这一点。一般来说,基类在约束子类方面非常有限。Base不是,也不应该试图负责监管每个可能编写碰巧继承自Base.