我正在尝试为我使用的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.
答案 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;
}