Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1455 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c/c++] pointeur de method ?? est ce que c'est possible??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c/c++] pointeur de method ?? est ce que c'est possible??

n°680602
slvn
Posté le 22-03-2004 à 20:24:36  profilanswer
 

hello,
 
je cherche a faire un truc plutot bizarre en C/C++,
mais je commence a avoir des doutes sur la possibilite de le faire:
 
supposons que j'ai une classe Voiture. cette classe a une methode "void demarrer()".
et il y a deux instances: voitureA, voitureB.
 
 
est ce que c'est possible de faire qq chose avec un pointeur de fonction  

Code :
  1. {
  2.   void (*ptrFunction) ();
  3.   ptrFunction = voitureA.demarrer;
  4.   printf("demarrer la voiture A: " );
  5.   (*ptrFunction)();
  6.  
  7.   ptrFunction = voitureB.demarrer;
  8.   printf("demarrer la voiture B: " );
  9.   (*ptrFunction)();
  10. }

mood
Publicité
Posté le 22-03-2004 à 20:24:36  profilanswer
 

n°680617
verdoux
And I'm still waiting
Posté le 22-03-2004 à 20:54:40  profilanswer
 

Quelle est l'idée de manoeuvre ?

n°680639
slvn
Posté le 22-03-2004 à 21:15:57  profilanswer
 

l'idee c'est que la classe Voiture est deja ecrite, et qu'une instance est cree. (en fait 1 seule).
 
Je cherche a appeller des fonctions "on the fly" pour agir sur la classe, pendant qu'elle est en cours d'execution dans le framework.
 
je travaille avec VxWorks/Tornado (envirronement temps reel), et je peux vraiment acceder a pas mal de chose bas niveau. genre, si une fonction en C est definit globalment, je peux y acceder et l'executer on the fly.
 
le pb du C++, c'est que ce n'est pas des fonction, mais des methodes, donc je voudrais faire un lien - de la maniere la plus simple possible-  depuis une fonction C, vers la methode d'une instance C++.
 
en appelant ptrFunction,
je voudrais que  voitureA.demarrer() soit executer.
 
 

n°680647
Taz
bisounours-codeur
Posté le 22-03-2004 à 21:28:33  profilanswer
 

déjà dit dans un sujet avec un titre quasi identique

n°680667
slvn
Posté le 22-03-2004 à 21:59:32  profilanswer
 

ouias,  
j'ai trouver ca
http://forum.hardware.fr/forum2.ph [...] subcat=386
 
c'est pas tout a fait ce que je veux faire.
au final, le code ecrit est:

Code :
  1. (obj.*a)();
  2.       (obj.*b)(42);
  3.       (obj.*c)();
  4.    
  5.       (ptr->*a)();
  6.       (ptr->*b)(42);
  7.       (ptr->*c)();


 
en fait, je chercherais a faire un lien depuis la fonction A().
vers "obj->method()";  
mais je sais pas si ca peut marcher, je suis en train de regarde le code asm du bazar :)

n°680680
Taz
bisounours-codeur
Posté le 22-03-2004 à 22:08:36  profilanswer
 

non, pas l'asm, tu perds ton temps. regarde dans STL
 
http://www.sgi.com/tech/stl/mem_fun_t.html (et les 3 autres pages)
 
et ça ça marche bien

n°680718
slvn
Posté le 22-03-2004 à 22:31:36  profilanswer
 

ah ouais, en effet, ca l'air mieux.
 
juste une question, comment on fait pour utiliser la STL?? (je veux dire, pour la compilation, y a une librairie en +, des includes ?!)

n°680721
slvn
Posté le 22-03-2004 à 22:33:45  profilanswer
 

je viens de trouver des infos sur  
http://artis.imag.fr/~Xavier.Decor [...] ction.html
ok a priori, rien a cahnger pour la compilation
je vais voir ce que ca donne
thanks :jap:  

n°680736
Taz
bisounours-codeur
Posté le 22-03-2004 à 22:55:06  profilanswer
 

ben regarde mon lien ... y ades exemples ... la STL cai des templates et c'est standard : cout en fait parti. t'as juste à inclure et voilà

n°680773
slvn
Posté le 22-03-2004 à 23:47:34  profilanswer
 

j'essaue de compiler ca avec g++ sous cygwin, mais je me prends de tonner d'erreurs:
 

Code :
  1. //
  2. // mem_fun example
  3. //
  4. #include <functional>
  5. #include <list>
  6. using namespace std;
  7. int main(void)
  8. {
  9.   int a1[] = {2,1,5,6,4};
  10.   int a2[] = {11,4,67,3,14};
  11.   list<int> s1(a1,a1+5);
  12.   list<int> s2(a2,a2+5);
  13.   // Build a list of lists
  14.   list<list<int>* > l;
  15.   l.insert(l.begin(),s1);
  16.   l.insert(l.begin(),s2);
  17.   // Sort each list in the list
  18.   for_each(l.begin(),l.end(),mem_fun(&list<int>::sort));
  19. }


 

Code :
  1. slvnCpp.cpp: In function `int main()':
  2. slvnCpp.cpp:65: error: no matching function for call to `
  3.    std::list<std::list<int, std::allocator<int> >*,
  4.    std::allocator<std::list<int, std::allocator<int> >*> >::insert(
  5.    std::_List_iterator<std::list<int, std::allocator<int> >*, std::list<int,
  6.    std::allocator<int> >*&, std::list<int, std::allocator<int> >**>,
  7.    std::list<int, std::allocator<int> >& )'
  8. /usr/include/c++/3.3.1/bits/list.tcc:88: error: candidates are:
  9.    std::_List_iterator<_Tp, _Tp&, _Tp*> std::list<_Tp,
  10.    _Alloc>::insert(std::_List_iterator<_Tp, _Tp&, _Tp*>, const _Tp& ) [with _Tp
  11.    = std::list<int, std::allocator<int> >*, _Alloc =
  12.    std::allocator<std::list<int, std::allocator<int> >*>]
  13. /usr/include/c++/3.3.1/bits/stl_list.h:831: error:                 void
  14.    std::list<_Tp, _Alloc>::insert(std::_List_iterator<_Tp, _Tp&, _Tp*>,
  15.    unsigned int, const _Tp& ) [with _Tp = std::list<int, std::allocator<int> >*,
  16.    _Alloc = std::allocator<std::list<int, std::allocator<int> >*>]
  17. slvnCpp.cpp:66: error: no matching function for call to `
  18.    std::list<std::list<int, std::allocator<int> >*,
  19.    std::allocator<std::list<int, std::allocator<int> >*> >::insert(
  20.    std::_List_iterator<std::list<int, std::allocator<int> >*, std::list<int,
  21.    std::allocator<int> >*&, std::list<int, std::allocator<int> >**>,
  22.    std::list<int, std::allocator<int> >& )'
  23. /usr/include/c++/3.3.1/bits/list.tcc:88: error: candidates are:
  24.    std::_List_iterator<_Tp, _Tp&, _Tp*> std::list<_Tp,
  25.    _Alloc>::insert(std::_List_iterator<_Tp, _Tp&, _Tp*>, const _Tp& ) [with _Tp
  26.    = std::list<int, std::allocator<int> >*, _Alloc =
  27.    std::allocator<std::list<int, std::allocator<int> >*>]
  28. /usr/include/c++/3.3.1/bits/stl_list.h:831: error:                 void
  29.    std::list<_Tp, _Alloc>::insert(std::_List_iterator<_Tp, _Tp&, _Tp*>,
  30.    unsigned int, const _Tp& ) [with _Tp = std::list<int, std::allocator<int> >*,
  31.    _Alloc = std::allocator<std::list<int, std::allocator<int> >*>]
  32. slvnCpp.cpp:69: error: no matching function for call to `mem_fun(<unknown type>
  33.    )'
  34. slvnCpp.cpp:69: error: `for_each' undeclared (first use this function)
  35. slvnCpp.cpp:69: error: (Each undeclared identifier is reported only once for
  36.    each function it appears in.)


 
 

mood
Publicité
Posté le 22-03-2004 à 23:47:34  profilanswer
 

n°680781
Taz
bisounours-codeur
Posté le 23-03-2004 à 00:12:42  profilanswer
 

doucement :D
 
y a un peti problème, il faut juste un petit cast bien placé
 

Code :
  1. #include <functional>
  2. #include <list>
  3. #include <algorithm>
  4. using namespace std;
  5. namespace
  6. {
  7.   template<typename T, size_t N>
  8.   inline const T * begin(const T (&tab)[N])
  9.   {
  10.     return tab;
  11.   }
  12.   template<typename T, size_t N>
  13.   inline const T* end(const T (&tab)[N])
  14.   {
  15.     return tab + N;
  16.   }
  17. }
  18. int main()
  19. {
  20.   typedef std::list<int> Li;
  21.   int a1[] = {2,1,5,6,4};
  22.   int a2[] = {11,4,67,3,14};
  23.   Li s1(begin(a1), end(a1));
  24.   Li s2(begin(a2), end(a2));
  25.   list< Li > l;
  26.   l.push_front(s1);
  27.   l.push_front(s2);
  28.   for_each(l.begin(), l.end(),
  29.    mem_fun_ref(static_cast<void (Li::*)()>(&Li::sort))
  30.    );
  31. }

n°680782
Taz
bisounours-codeur
Posté le 23-03-2004 à 00:17:48  profilanswer
 

bon voilà, maintenant, je t'explique le pourquoi du cast.
 
quand tu utilises une fonction template, sans spécifier ses arguments, le compilateur doit faire une déduction. mais ça n'est pas toujours possible. std::list à deux méthodes sort, donc ton compilateur ne sait pas laquelle utiliser.
 
alors on cast pour lui donner l'information :D
ici, on pourrait donner les arguments template directement sinon
 
->

Code :
  1. mem_fun_ref<void, Li>(&Li::sort)

cai faisable parce que mem_fun_ref n'a pas beaucoup d'arguments ... mais s'il y en avait plus, le static_cast est nettement plus concis et surtout, sans danger ... s'il y a un problème, il est soulevé à la compilation. en fait, on ne cast rien, on dit juste au compilateur quoi utiliser :D
 
 
edit: ce n'est rien de compliqué, c'est juste un peu de logique


Message édité par Taz le 23-03-2004 à 00:26:04
n°680787
slvn
Posté le 23-03-2004 à 00:58:41  profilanswer
 

tout n'est pas clair encore pour moi en cpp, mais j'ai bien capte le pb en question de l'exemple:)
 
par contre, je me rend compte que ca correspond pas a ce que je recherche.
 
je souhaite, qu'en appelant  
la fonction.  
 
Hello()
 
ca appelle directment:  instance345->Method();
 
(sans avoir a l'implementer, ie: je ne veux pas:
Hello(){instance345->method();}
 
le nec plus ultra serait qq chose du type

Code :
  1. void Hello();
  2. ...
  3. Hello = instance345->method;
  4. ...
  5. Hello();  //equivalent~ instance345->method();


 
 
en fait, je pense que c'est pas si simple de part la maniere dont c++ fonctionne.
 
merci en tout pour test explication:) (ps tjrs facile a comprendre :D faut s'accrocher)
 
Sylvain.

n°680788
Taz
bisounours-codeur
Posté le 23-03-2004 à 01:08:50  profilanswer
 

ben c'est bon tout ça ... je comprends pas le problème ...

n°680789
slvn
Posté le 23-03-2004 à 01:40:35  profilanswer
 

Taz a écrit :

ben c'est bon tout ça ... je comprends pas le problème ...


 
l'exemple est choppe d'un site web, je voulais tester avec qq chose qui compile bien.
 
le probleme, c'est que nul part, les functions/templates mem_fun_xxx ne referent a l'instance dont je veux appeler les methodes.  
 
est ce qu'on peut partir d'un exemple simple + simple:
 

Code :
  1. #include "stdio.h"
  2.   #include "stdlib.h"
  3.    
  4. class A {
  5.    private:
  6.    int value;
  7.  
  8.    public:
  9.    void method() { printf( "a: %d\n", value ); };
  10.  
  11.    A(int x){value=x;}; 
  12.    ~A(){};
  13. };
  14. int main(){
  15.    A * a1 = new A(1);
  16.    A * a2 = new A(2);
  17.  
  18.    a1->method();
  19.    a2->method();
  20.  
  21.    void f();
  22.  
  23.    f = mem_fun_ref_t<void, A>( &A::method ); //ici on a pas de rapport avec l'instance a1 ni a2 ?? donc comment, si j'appelle la fonction f, je vais pouvoir distinquer a1->method(), de a2->method()???
  24.  
  25.  
  26.    return 0;
  27.   }


n°680790
Taz
bisounours-codeur
Posté le 23-03-2004 à 01:46:32  profilanswer
 

ok, je viens de comprendre ... si tu as boost (donné dans les bibliolinks)
 

Code :
  1. #include <boost/function.hpp>
  2. #include <boost/bind.hpp>
  3. #include <iostream>
  4. struct Foo
  5. {
  6.   void bar() { std::cout << "Spam\n"; }
  7. };
  8. int main()
  9. {
  10.   Foo foo;
  11.   boost::function<void ()> hello = boost::bind(&Foo::bar, &foo);
  12.   hello();
  13.   hello();
  14.   hello();
  15. }

n°680791
slvn
Posté le 23-03-2004 à 01:49:01  profilanswer
 

cool, vu l'exemple, ca ressemble a ce qu'il me faut !!
je regarde ca:)

n°680792
Taz
bisounours-codeur
Posté le 23-03-2004 à 01:59:59  profilanswer
 

en fait y a des trucs pour binder et faire des objet fonction dans STL, mais c'est trop limité pour le moment ... mais dans boost, y a de tout : plus il intégrerons boost dans STL à la prochaine révision, mieux ça sera

n°680793
Taz
bisounours-codeur
Posté le 23-03-2004 à 02:04:28  profilanswer
 

sinon tu sais, si le nom de la méthode que tu veux appeler ne change pas, si c'est toujours la même, operartor() convient bien

n°680794
slvn
Posté le 23-03-2004 à 02:23:38  profilanswer
 

la stl, c'est une library a part ?!
je sais pas la taille de boost, mais je pense que ca va pas le faire: il s'agit d'un system embarque (dvdplayer/recorder) je qu'il vont faire la gueule ici si je leur annoncer que je met une lib 1 mo :))
 
en fait, il y a surment une centaine de fonction a binder. voire plus, et il faudrait meme que ca soit faisable de maniere simple.
 
je vais essaye de faire un truc + simple. genre une petite appli facilement modifiable, sinon je vais pas m'en sortir.

n°680796
Taz
bisounours-codeur
Posté le 23-03-2004 à 02:26:43  profilanswer
 

ah ah
 
tu connais une bibliothèque qui soit pas à part ? et boost c'est des template pour la majeur partie, alors une fois que c'est compilé, le binaire se suffit à lui même.

n°680797
Taz
bisounours-codeur
Posté le 23-03-2004 à 02:27:38  profilanswer
 

si tu as autant de truc à lié c'est que y a peut être un problème dans le design : ça veut dire que finalement, ton instance tu t'en fout, ... et là je suis plus

n°680801
slvn
Posté le 23-03-2004 à 03:18:49  profilanswer
 


en fait, je sais pas tout simplement si la STL est linker au projet. a mon avis, y a des grande chance pour qu'elle le soit pas vu que la memoire est limite sur le target.
 
hum hum hum, sinon spa mon design. c'est un projet qui va bientot avoir une dizaine d'annee je pense :) donc y a des couches par dessus d'autre couche. parfois c'est un joli merdier:)
 
en fait, l'instance en question est un navigateur (VRNavigator).
et est inclu dans un framework de tests. le pb, c'est qu'exposer tout les fonctionnalites du Navigateur en haut du framework est assez stupide a mon avis et augmenter pas mal la complexite.  
ce que je voudrais faire, c'est exposer cette classe directement.
si les methodes avaient ete globales en C++ ca aurait ete super simple. (Avec VxWork tu peux appeler les fonction on the fly, mais la en C++ c'est plus reloud car elle dependes du context/instance, bref...)
 
le problem, en fait, c'est qu'il faut tester un composant en particulier dans l'ensemble du framework car c'est important pour son comportement, et pour le risque de bugs. mais ce que je cherche a eviter c'est d'augmenter la complexiter de la couche superieur :)
 

n°680802
Taz
bisounours-codeur
Posté le 23-03-2004 à 03:22:05  profilanswer
 

slvn a écrit :


en fait, je sais pas tout simplement si la STL est linker au projet. a mon avis, y a des grande chance pour qu'elle le soit pas vu que la memoire est limite sur le target.

mais t'es con ou quoi ? c'est des template, y a pas à linker :o

n°680884
slvn
Posté le 23-03-2004 à 09:54:16  profilanswer
 

oky, je me suis laisse avoir par le terme library :/
je me repenche demain, surtout sur boost, si y a pas de linkage, donc si ca n'augment en rien la taille du binaire, ca va m'interesser :)
 

n°680929
Taz
bisounours-codeur
Posté le 23-03-2004 à 10:19:58  profilanswer
 

slvn a écrit :

oky, je me suis laisse avoir par le terme library :/


 
je vois pas de différence : qu'une bibliohtèque soit sous forme de code objet ou de template / fonction inline, ça reste une bibliothèque

slvn a écrit :


 
 
je me repenche demain, surtout sur boost, si y a pas de linkage, donc si ca n'augment en rien la taille du binaire, ca va m'interesser :)

si tu veux je te passe le code d'une fonction qui réduit la taille du binaire... c'est définitif, t'es idiot, tu ferais bien de revoir tes bases de compilation...

n°681022
frenchkiss
Posté le 23-03-2004 à 11:01:50  profilanswer
 

et ca t'interresserai pas de faire ( si tu veux changer "on the fly" la methode a tester sur ton objet..)
 

Code :
  1. voif demarrerCallback(voiture* v){ v->demarre();}
  2. void klaxonneCallback(voiture* v){ v->klaxonne();}
  3. void (*ptrFunction) (voiture*);
  4.   ptrFunction = demarrerCallBack; 
  5.   printf("demarrer la voiture A: " );
  6.   (*ptrFunction)(voitureA);
  7.   printf("demarrer la voiture B: " );
  8.   (*ptrFunction)(voitureB);
  9.   ptrFunction = klaxonnerCallBack; 
  10.   printf("faire klaxonner la voiture A: " );
  11.   (*ptrFunction)(voitureA);
  12.   printf("faire klaxonner la voiture B: " );
  13.   (*ptrFunction)(voitureB);


 

n°681027
Taz
bisounours-codeur
Posté le 23-03-2004 à 11:05:37  profilanswer
 

ben t'as exactement la meme chose en tempalte et en mieux avec mem_fun*

n°681082
frenchkiss
Posté le 23-03-2004 à 11:37:54  profilanswer
 

oui mais comme il a l air de bloquer un peu avec la STL , et que boost le penaliserai ( au niveau taille je parle),  
c proposition alternative , et on sait jamais ca peut lui donner d autres idées.

n°681091
Taz
bisounours-codeur
Posté le 23-03-2004 à 11:41:52  profilanswer
 

frenchkiss a écrit :

oui mais comme il a l air de bloquer un peu avec la STL , et que boost le penaliserai ( au niveau taille je parle),

le fait est que qu'il n'a aucune idée de ce qu'est une bibliothèque et la compilation
 

frenchkiss a écrit :


c proposition alternative , et on sait jamais ca peut lui donner d autres idées.
 

supair ton alternative, c'est le première que j'ai dite. mais bon il est pas content ... ça sent la masturbation de programmeur C qui veut a foutu des trucs dans des classes au petit bonheur la chance, seulement maintenant, il veut plus des classes

n°681654
slvn
Posté le 23-03-2004 à 17:01:01  profilanswer
 

hey Taz, arrete de t'embaler,
 
une library qui fait 1 mo, et qui doit est linke, va au final augment la taille du binaire d'environ 1 mo, correct ?
 
quand tu dis library,comme tu precises rien, c'est que tu parle de qq chose a linker. sinon dis template library. (comme dnas STL) on evitera toute confusion.
 
Comme au final, boost est une template library, ca n'aura surement pas de pb majeur au niveau de la taille au final.
 
bref, sinon, y a 150 personnes a travailler sur un software.. faudrait que t'essayes de comprendre que tout n'est pas simple et facil a faire pour rester dans l'architecture du projet. y a des parties, qui sont releases, d'autre en production, d'autre developpe a 1000 bornes, d'autre qui attendent un support pour le customer. si c'etait aussi simple de changer la conception d'un software en faisant ca dans son coin, je pense que ca se saurait.
 
merci quand meme pour tout l'aide que tu m'as apporte :jap:

n°681686
Taz
bisounours-codeur
Posté le 23-03-2004 à 17:19:50  profilanswer
 

slvn a écrit :

hey Taz, arrete de t'embaler,
 
une library qui fait 1 mo, et qui doit est linke, va au final augment la taille du binaire d'environ 1 mo, correct ?
 
quand tu dis library,comme tu precises rien, c'est que tu parle de qq chose a linker. sinon dis template library. (comme dnas STL) on evitera toute confusion.
 
Comme au final, boost est une template library, ca n'aura surement pas de pb majeur au niveau de la taille au final.


 
t'as mis un sacré bout de temps à le comprendre ... genre quand tu vois le mot template partout, tu peux pas te douter ni que STL, ni que boost sont des bibliothèques template.

n°681750
slvn
Posté le 23-03-2004 à 18:08:17  profilanswer
 

ouias, frenchkiss a raison, j'ai jamais utilise la stl non plus.
 
dans la maniere de fonctionner, les templates vont etres transformes en C/C++ comme du pre-processing?! comme les #define &co  ... donc on peut voir le fichier generer avec: g++ -E ??

n°681752
Taz
bisounours-codeur
Posté le 23-03-2004 à 18:09:56  profilanswer
 

slvn a écrit :

ouias, frenchkiss a raison, j'ai jamais utilise la stl non plus.
 
dans la maniere de fonctionner, les templates vont etres transformes en C/C++ comme du pre-processing?! comme les #define &co  ... donc on peut voir le fichier generer avec: g++ -E ??
 

donc tu ne sais pas du tout ce que sont les templates .... JoelF à l'aide :o
 
juste une question en passant : pourquoi tu dis que tu fais du C++ alors qu'en fait tu fait du C ?


Message édité par Taz le 23-03-2004 à 18:10:39
n°681776
slvn
Posté le 23-03-2004 à 18:31:22  profilanswer
 

en details:
 
 
le projet est fait en asm/c/c++
 
asm/c, c'est pour une library. le partie en c++ c'est :
 
-la couche applications
-un system de messaging, intra application et pour des notifications.  
-une couche pour faire marcher plusieur application de maniere concurrente, ainsi que pour tester.
-puis encore une couche de messaging, a la fois pour le target et pour la communication target/host.
 
cette couche de test, permet "certains" tests, oriente "utilisateur", ces tests sont effectue par un service  de la boite. mais ils ne sont pas assez exhaustif (c'est pas leur but), et on veut que n'importe qui puisse tester une des applications de maniere minutieuse, c'est a dire n'importe qu'elle des fonctionnalites de l'application. (ce que j'appel application, c'est en partie la class dont j'essaye de recupperer les methodes).
 
le moyen le plus, a mon sens, pour agir sur cette classe/instance. c'est de posseder une fonction qui appel instance->method.
tout simplemement car l'envirronement de developpement embarque, permet d'appeler ces fonctions on the fly.
 
 
donc, voila pourquoi je dois travailler avec du c++.


Message édité par slvn le 23-03-2004 à 18:32:43
n°682010
Taz
bisounours-codeur
Posté le 23-03-2004 à 22:42:51  profilanswer
 

slvn a écrit :


donc, voila pourquoi je dois travailler avec du c++.

ben alors fait le, parce que si ton seul avantage, c'est la syntaxe d'appel de fonction membre ... en C t'aurais pu faire comme BSD SleepyCat  obj->f(obj, param1, param2, ...)
 
quitte à utiliser le C++ autant apprendre le C++

n°682080
slvn
Posté le 23-03-2004 à 23:48:46  profilanswer
 

en fait, j'escontais plus qq chose que l'avantage de la syntaxe, et c'est pour ca que je voulais regarder le code asm.
j'aurais aime un recopiage d'adresse, genre:  
ma_fonction = instance->methode;
mais bon, en fait ca le fait pas.
 
des trucs obj->(obj, param1, param2, ) c'est exactement ce qu'il y a en fait dans la couche C. (c'est en C, mais oriente object de cette maniere, avec les notions de classe, heritage, public, prive, method, field ).
 
je vais faire un script pour me generer le code.
et faire des fonctions du style.
 
ma_fonction_blabla( p1, p2) {
   MaClasse::getInstance()->blabla( p1, p2);
}
 
getInstance, etant une methode static qui donnne la derniere instance cree. (de tte facon il n y en a qu'une seule a chaque fois en meme temps, donc je peux mette un champs static dans la class pour memoriser l'instance).
 

n°682094
Taz
bisounours-codeur
Posté le 23-03-2004 à 23:53:07  profilanswer
 

slvn a écrit :

en fait, j'escontais plus qq chose que l'avantage de la syntaxe, et c'est pour ca que je voulais regarder le code asm.
j'aurais aime un recopiage d'adresse, genre:  
ma_fonction = instance->methode;
mais bon, en fait ca le fait pas.


c'est bien ce que je dis : tu as raté un chapitre si tu as un jour appris la POO.

slvn a écrit :


des trucs obj->(obj, param1, param2, ) c'est exactement ce qu'il y a en fait dans la couche C. (c'est en C, mais oriente object de cette maniere, avec les notions de classe, heritage, public, prive, method, field ).


fonction membre, membre

slvn a écrit :


je vais faire un script pour me generer le code.
et faire des fonctions du style.
 
ma_fonction_blabla( p1, p2) {
   MaClasse::getInstance()->blabla( p1, p2);
}
 
getInstance, etant une methode static qui donnne la derniere instance cree. (de tte facon il n y en a qu'une seule a chaque fois en meme temps, donc je peux mette un champs static dans la class pour memoriser l'instance).

j'espère que t'as bien gavé d'inline tout ça.

n°682131
slvn
Posté le 24-03-2004 à 00:20:54  profilanswer
 

merci pour tes remarques constructives.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c/c++] pointeur de method ?? est ce que c'est possible??

 

Sujets relatifs
faire un tableau scrollable c'est possible ?[HTML] est-il possible de locker un champ texte [résolu]
Est-il possible de changer le xsl associé à un fichier xml à la volée?[SQL] Importer BDD au Format .sql sur Access, Possible?
[résolu]ouverture fichier excel plus possibleaffectation de pointeur
recuperer en javascript pour affecter à une variable php possible ??Cadre qui prend auto toute la hauteur possible
Problème de pointeur... (oui, je sais.)[ORACLE + ASP] Possible d'ajouter un user a partir d'une page asp ?
Plus de sujets relatifs à : [c/c++] pointeur de method ?? est ce que c'est possible??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR