带有可变指针函数指针的C ++模板化类

时间:2019-10-21 09:29:21

标签: c++ templates variadic-templates variadic-functions

我想在c ++中实现一个后台处理程序/工作者类,该类具有将新任务推送到该类中以使其由后台线程执行的功能。该任务将附加到队列中,并且如果工作程序未运行,则会启动该任务。

为了更好地重用,我想为可变参数任务使用可变参数模板参数,但是我在制定模板头时遇到麻烦。

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);
    };
};

是否可以通过单个模板头接受带有可变参数的函数?

谢谢大家

1 个答案:

答案 0 :(得分:3)

具有专长:

template <auto value>
class worker;

template <typename ... TParams, void (*F)(TParams...)>
class worker<F>
{
public:
    void push(TParams... args);
};

Demo

相关问题