Я хочу реализовать класс спулера / работника в 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);
};
};
Есть ли способ принять функцию с переменными параметрамис одним заголовком шаблона?
Спасибо всем