расширенный список параметров для вариационного шаблона
Я работаю над архитектурой на основе событий для исследовательского проекта. В настоящее время система использует сигнализацию Qt, но мы пытаемся отойти от Qt, поэтому мне нужно что-то, что будет работать почти так же хорошо, как цикл событий Qt и сигналы через потоки.
Возможно, вопреки моему здравому мнению, я решил использовать шаблоны с переменным числом аргументов для создания общего события, которое будет использоваться для выполнения обратного вызова в целевом потоке.
template<typename dest, typename... args>
class Event {
public:
Event(dest* d, void(dest::*func)(args...), args... a)
: d(d), func(func), pass(a...) { }
virtual void perform() {
(d->*func)(pass...);
}
protected:
dest* d;
void(dest::*func)(args...);
args... pass;
};
Я не нашел ничего, что указывало бы, возможно ли это. Однако мне трудно поверить, что это не так. Учитывая это, мне было интересно, есть ли способ сделать что-то подобное и если нет, то почему? Кроме того, если у кого-то есть лучший способ сделать это, я бы приветствовал это предложение.