c++ 只继承公共构造函数

Posted

技术标签:

【中文标题】c++ 只继承公共构造函数【英文标题】:c++ Only inherit public constructors 【发布时间】:2017-08-02 09:04:03 【问题描述】:

我正在尝试从基类继承构造函数,但出现错误:C2876: 'Poco::ThreadPool' : 并非所有重载都可访问。

namespace myNamespace

    class ThreadPool : public Poco::ThreadPool
        using Poco::ThreadPool::ThreadPool;  // inherits constructors
    ;


Poco::ThreadPool 有 3 个构造函数,2 个带有默认初始化参数的公共构造函数和 1 个私有构造函数。

我怎样才能只继承公共构造函数?

我没有使用 c++11。

【问题讨论】:

你没有使用C++11,你想继承构造函数,什么? 在 C++11 之前肯定有办法做到这一点吗?这是一个非常重要的功能。 @Blue7 使用using declaration 继承构造函数是 C++11 的一个特性,做类似 c++11 之前的事情的唯一方法是在派生类中手动添加所有构造函数并调用父母的。 是的,这是一个重要的功能。这就是它在 C++11 中添加的原因。在我们不得不输入之前。 @Holt 没关系。您能否以如何将其作为答案的示例发布此内容?我只需要一个构造函数,它有默认参数值,这是个问题吗? 【参考方案1】:

如果您不使用 C++11 或更高版本,则不能使用单个 using 声明继承所有基本构造函数。

C++11 之前的旧方法是在派生类中为我们想要公开的基类中的每个 c'tor 创建一个相应的 c'tor。比如:

struct foo 
  int _i;
  foo(int i = 0) : _i(i) 
;

struct bar : private foo 
  bar() : foo()  // Use the default argument defined in foo
  bar(int i) : foo(i)  // Use a user supplied argument
;

如果你仍然想要一个带有默认参数的 c'tor,你也可以这样做:

struct baz : private foo 
  baz(int i = 2) : foo(i)  // We can even change what the default argument is
;

【讨论】:

以上是关于c++ 只继承公共构造函数的主要内容,如果未能解决你的问题,请参考以下文章

在使用 C++ 进行虚拟继承期间调用构造函数

Js实现继承的方法

C++不是说虚基类构造函数只被调用一次吗?

继承公共/受保护/私有构造函数

C++入门派生类和基类的构造/析构函数关系

在私有继承中公开构造函数