magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
22 août 2005 à 20:34
steve_clamage -
25 août 2005 à 08:34
J'aimerai savoir ce que vous feriez dans ce cas:
avec un gros projet
j'ai la possibilité d'accélérer considérablement sa vitesse d'exécution
mais cela entrainerai une utilisation beaucoup plus importante de la mémoire
(mémorisation de chaines de caractères au lieu de les reparcourir un nombre incalculable de fois
sachant que ce ne sont pas des parcours simples, mais traitant bcp de cas particuliers
)
feriez vous ce changement?
quitte à ce que l'utilisation mémoire soit énorme
ou pas?
merci de votre lecture & de vos avis sur la question
___________________________________________________________
Magicalement
Nono
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 août 2005 à 21:44
Désolé mais je ne vois pas sur cette page de fonction non static passée comme param pour un callback.
exemple avec EnumWindows() qui demande une fonction de rappel en 1er param.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 23 août 2005 à 23:05
Je reconnais avoir dit une belle connerie ! Ca m'apparendra à la fermer plus souvent!
Effectivement, il faut passer, et le pointeur vers l'objet, et le pointeur de fonction membre pour faire un callback à la "mode" C++. Pas de miracle alors avec l'API en C de win32....
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 24 août 2005 à 10:46
salut,
BN tu peux pas avoir de fonction callback qui soit une fonction non
statique d'une classe car la convention d'appel d'une callback
(__stdcall) n'est pas la meme que celle d'une fonction non statique
d'une classe (ou le this est empilé avant les param).
ca n'empeche pas que les fonctions non statiques des classes ont des adresses fixes.
Elles sont commes les fonctions classiques, avec juste en plus, l'empilement implicite de this ...
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 24 août 2005 à 15:18
Quand tu fais a.f();
en gros ca empile &a (qui représentera this) ou ca le met dans un registre, puis les autres paramètres sont passés de manière normale
Ca te convient pas comme explication?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 24 août 2005 à 15:39
BruNews, si tu pense que la fonction n'est pas à un endroit fixe, c'est que tu dois penser qu'elle dépend de l'objet et que la position est déterminée à l'instanciation de l'objet. Pourtant, regarde ce code, il marche sans problème:
#include <windows.h>
class A
{
public:
void f()
{
MessageBox(0, "A::f()", "A::f()", 0);
}
};
int main()
{
((A*)0)->f();
}
Il marche car f ne fait aucune indirection sur this
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 24 août 2005 à 19:19
Avec des fonctions virtuelles je ne vais pas essayer, je ne prétends même pas que c'est possible. Et puis la notion de virtuel n'a aucun intérêt ici car si tu regarde bien, j'utilise la fonction membre sans instancier d'objet. Dieu sait ce que vaut this à l'intérieur