Re, hum..., la version 1 n'est pas super pratique..., dans le sens ou il manque pas mal de choses pour rendre le framework vraiment performant, et j'ai besoin d'un système de gui performant pour mon jeux, pour cela que je me consacre à la version 2, la version 1 est finie. (à part remettre un peu d'ordre dans le code et sur les noms de fonctions mais ça, c'est pas ce qui prend le plus de temps)
std::bind est bien mais il ne me permet pas de stocker les arguments d'un pointeur de fonction dans une liste pour l'appeler plus tard comme le font les signaux de Qt, bind sert juste à créer des pointeurs de fonctions, la librairie permettant de faire ce que je veux faire n'existant pas je dois l'implémenter moi même.
J'ai trouvé cependant une solution qui se rapproche du problème. (Le code source manipulant des template pack étant assez compliqué à aborder, car il faut appelle à la récursivité et à la spécialisation de template, j'ai chercher une solution sur internet)
http://stackoverflow.com/questions/7858817/unpacking-a-tuple-to-call-a-matching-function-pointer
template<int ...>
struct seq { };
template<int N, int ...S>
struct gens : gens<N-1, N-1, S...> { };
template<int ...S>
struct gens<0, S...> {
typedef seq<S...> type;
};
template <typename R> struct Bind {
};
template <typename R, typename ...A> struct Bind <R(A...)> {
Bind (R(A...), A... args) {
f = R(A...);
}
Function<R(A...)> f
};
Finalement je crois que ça doit être faisable si j'adapte le code source de ce lien à ma structure bind. *-*
Y'a donc rien de bien compliqué là dedans.
Bref je vais arrêter de raconter ma vie sur ce topic. (Ha je serai tellement fier n'en pêche si j'arrive à recoder bind.
)
Et même le système de signaux et de slot de QT.
PS : enfin si il me permet de stocker les paramètre de la fonction, mais pas de stocker la fonction de manière permanente vu que bind, n'est pas une classe.
Et je n'aime pas utiliser la fonction connect de thor que je pense qu'elle permettrait aussi au développeur d'envoyer une simple variable à la fonction connect en call-back => crach. (Enfin, d'après ce que j'ai vu sur son tutoriel)
De plus le système de thor, ne permet pas de passer des arguments d'une fonction (un signal) à une autre fonction (un slot), il faut passer donc par un context sur la renderwindow ce qui complique les chose je trouve.
Moi je n'aurais qu'à faire ceci :
connect (action, objet, Bind<void>(&signal), renderwindow), objet, Bind<void>(&slot));
[/code]
Ou un truc du genre du moins car je n'ai pas encore créer la classe qui connecte tout.