lista de parâmetros expandida para modelo variável
Estou trabalhando em uma arquitetura baseada em eventos para um projeto de pesquisa. Atualmente, o sistema usa sinalização Qt, mas estamos tentando nos afastar do Qt, por isso preciso de algo que funcione quase tão bem quanto o loop de eventos Qt e os sinais através dos threads.
Provavelmente, contra meu julgamento, escolhi usar modelos variados para criar um evento genérico que será usado para executar o retorno de chamada no encadeamento de destino.
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;
};
Não encontrei nada que indique se isso é possível. No entanto, tenho dificuldade em acreditar que não é. Dado isso, eu queria saber se existe uma maneira de fazer algo assim e se não existe, por quê? Além disso, se alguém tiver uma maneira melhor de fazer isso, eu gostaria de receber a sugestão.