Bonjour!
J'ai quelque questions à propos du langages pour savoir si il y a moyen de faire les choses suivantes ou pas.
-Y a t'il moyen d'allouer un pointeur de fonction sur le tas ? Faire quelque chose comme ceci :
void(*func)(int, int, etc...) = new (int args1, int args2, etc...) { //Definition de la fonction ici. }
Je sais qu'il existe les fonctions anonyme mais celles-ci ont un défaut : le compilateur ne peux pas déduire leur type.
Ce qui alourdi la syntaxe dans le cas de l'utilisation d'un wrapper sur la fonction :
wrapper.setParams<std::function<void(int arg1, int arg2, etc...)>> (val1, val2, etc...);
Hors que je n'ai pas besoin de passer de paramètre template pour les fonctions membres et les fonctions non membre, car, le compilateur peut déduire automatiquement le type de la fonction dans ce cas la.
L'avantage du wrapper est que je peux stocker le pointeur de fonction quelque part (dans un tableau par exemple), et changer les paramètres de la fonction n'importe ou dans le programme comme ceci :
wrapper.setParams<std::function<void(int arg1, int arg2, etc...)>, 1, 2> (val1, val2);
Ce qui n'est pas possible avec std::bind et les placeholders.
Seconde question : est-il possible de récupérer la signature d'une fonction membre d'une classe ? (Via le binaire de la classe par exemple)
Ce que je voudrais c'est enregistrer les signatures des fonctions membre d'une classe dans une autre classe automatiquement à la compilation, afin de les appeler à l'exécution, faire un genre de système de réflexion en gros, ceci dans le but de pouvoir appeler des fonctions template virtuelle de la sorte :
baseClass.call(Signature, object, val1, val2, etc...)
Pour l'instant j'enregistre tout ça manuellement dans le main à l'aide de macros mais je voudrais savoir si il n'y a pas moyen de faire un système pour les enregistrer automatiquement.
Voilà merci d'avance pour vos réponses.
Si je demande ça c'est parce que je suis entrain de coder une bibliothèque ici :
http://lolilolightdevblog.wordpress.com/
Partager