c++ - 在派生类中强制执行 protected 构造函数

标签 c++ inheritance

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

简单的例子:

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 派生的子类都有一个 protected 构造函数。

最佳答案

不,没有办法强制执行此操作。通常,基类在如何约束子类方面非常有限。 Base 不是,也不应试图负责监管所有可能编写碰巧继承自 Base 的类的人。

关于c++ - 在派生类中强制执行 protected 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280272/

相关文章:

c++ - 为什么我不能用 const_iterator 调用模板基类构造函数?

javascript - 可以在 JS 中有抽象类吗?

C++11;非静态数据成员初始化可以访问其他数据成员吗?

c++ - '*' 标记之前的预期主表达式

java - 返回子类对象的通用 getter

c++ - 改变数组元素的值

java - 循环继承使用

派生类中函数的 C++ "virtual"关键字。有必要吗?

c++ - OnKillFocus 未被调用

c++ - 如何通过 Gradle 将链接器标志传递给 Android Studio 中的 cmake