c ++模板化class,带有指向可变函数的函数指针

c++ templated class with functionpointer to variadic function

我想在 c++ 中实现一个 spooler/worker class,它具有将新任务推送到 class 以让它们由后台线程执行的功能。任务附加到 queue,如果工作人员不是 运行,它就会启动。

为了更好地重用,我想为可变任务使用可变模板参数,但我在制定模板时遇到了问题 header。

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

有没有办法通过单个模板接受带有可变参数的函数header?

谢谢大家

专业化:

template <auto value>
class worker;

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

Demo