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

时间:2017-08-02 09:04:03

标签: c++ inheritance private-members

我试图从基类继承构造函数,但我收到错误:C2876:' Poco :: ThreadPool' :并非所有重载都可以访问。

namespace myNamespace{

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

}

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

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

我没有使用c ++ 11.

1 个答案:

答案 0 :(得分:3)

如果您不使用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
};