从基类继承函数声明中参数的默认值

时间:2017-08-02 08:33:19

标签: c++ inheritance threadpool wrapper poco-libraries

我正在尝试为我使用的Poco函数编写一个包装类。

这是我的代码:

//PocoWrapper.h
#include <stdio.h>
#include <Poco/Task.h>
#include <Poco/TaskManager.h>
#include <Poco/ThreadPool.h>

namespace myNamespace{

class ThreadPool : Poco::ThreadPool{};

}

现在,如果我将PocoWrapper.h包含在另一个脚本中,我应该可以使用:

myThreadPool = new myNamespace::ThreadPool(1,4);

但是这给出了错误:

//error: C2661: 'myNamespace::ThreadPool::ThreadPool' : no overloaded function takes 2 arguments

但是,如果我使用:

myThreadPool = new Poco::ThreadPool(1,4);

编译好。因此问题必须是它不是从Poco :: ThreadPool类继承函数的默认值。

ThreadPool构造函数具有默认值,因此它应该只能与2个参数一起使用。来自documentation

ThreadPool(
    int minCapacity = 2,
    int maxCapacity = 16,
    int idleTime = 60,
    int stackSize = 0
);

如何让我的包装器类只使用两个参数,比如基类呢?

我没有使用c ++ 11.

2 个答案:

答案 0 :(得分:1)

您可以通过using集体名称继承基类的构造函数:

namespace Poco {
    struct ThreadPool{
        ThreadPool(int);
        ThreadPool(int,int);
    };
}

namespace myNamespace{

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

}

答案 1 :(得分:1)

原因是构造函数不是继承的。因此,ThreadPool类中没有构造函数接受两个参数。

另一方面,当您创建Poco::ThreadPool类时,您可以自由使用其任何构造函数。请注意,根据documentation,有两个构造函数,每个构造函数都接受可选参数,因此无需指定完整的参数列表。

您可以使用using declaration来继承&#34;继承&#34;构造函数:

class ThreadPool : Poco::ThreadPool {};
    using Poco::ThreadPool::ThreadPool;
}