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++ 只继承公共构造函数的主要内容,如果未能解决你的问题,请参考以下文章