Je souhaite lier tout type d'événement à des fonctions de tout type pour le système d'interface utilisateur (G) d'un jeu sur lequel je travaille. Je souhaite stocker n'importe quel type de fonctions et ses arguments initiaux dans une classe de modèle Functor, que je peux lier à un index de liaison de signal. Les événements liés à une liaison de signal le déclenchent dès qu'ils apparaissent dans la file d'attente d'événements, ce qui provoque l'appel de tous les Functors liés à cette liaison.Implémentation d'un modèle Functor pouvant stocker les arguments de sa fonction
J'ai trouvé que le moyen de stocker les arguments de la fonction était d'utiliser un std::tuple
dans le modèle de foncteur, mais j'ai besoin d'aide pour l'initialiser correctement et le déballer correctement lors de l'appel de la fonction.
C'est ce que j'ai jusqu'à présent:
template<typename R, typename... Args>
class FuncBinding {
private:
std::tuple<Args...> args;
R(*fun)(Args...);
public:
FuncBinding(R(*pF)(Args...) , Args... pArgs)
:fun(pF), args(std::make_tuple<Args...>(pArgs)) {}
R invoke() {
return fun(args...);
}
R callFunc(Args... pArgs) {
return fun(pArgs...);
}
};
Comment puis-je utiliser le pack de paramètres Args
correctement pour ...
- ... créer la classe de modèle
std::tuple<Args...>
appropiately - ... initialise le
std::tuple<Args...>
instanceargs
avec les arguments de foncteur - ... déballer e tuple lorsque vous appelez la fonction via le pointeur de fonction
R(*fun)(Args...)
possible [dupe] (https://stackoverflow.com/questions/7858817/unpacking-a-tuple-to-call-a-matching-function-pointer/20441189#20441189). – Walter