【发布时间】:2019-10-21 22:17:52
【问题描述】:
我想在 C++ 中实现一个 spooler/worker 类,它具有将新任务推送到类中以让它们由后台线程执行的功能。任务被附加到队列中,如果工作人员没有运行,它就会启动。
为了更好地重用,我想为可变参数任务使用可变参数模板参数,但我在制定模板标题时遇到了麻烦。
template <void (*TFunction)(typename ... TParams)> //a parameter pack is not allowed here
class worker
{
public:
push(TParams... args);
};
template <typename ... TParams, void (*TFunction)(TParams...)> //template parameter pack not at end of parameter list
class worker
{
public:
push(TParams... args);
};
我有两个可行的想法,但我都不喜欢。
template <typename ... TParams>
class worker
{
public:
worker(void(*function)(TParams...)): function_(function) { }
push(TParams... args);
private:
const void (*function_)(TParams...);
};
template <typename ... TParams>
struct variadic
{
template <void*(TFunction)(TParams...)>
class worker {
public:
push(TParams... args);
};
};
有没有办法接受带有单个模板头的可变参数的函数?
谢谢大家
【问题讨论】:
标签: c++ templates variadic-templates variadic-functions