C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

fonction membres statiques / callback

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
PurL
Guest





PostPosted: Thu Aug 05, 2004 3:40 pm    Post subject: fonction membres statiques / callback Reply with quote



Bonjour,

Je bute toujours sur le meme probleme : appeler une fonction membre d'un
objet qui à été passée en parametre à un autre objet pour la rappeler plus
tard. Pour que ce soit possible, il faut que la fonction membre soit
statique, mais si elle est statique, on perd la porté des variables membres
du meme objet.

Je m'explique par un exemple :

- Je développe une application (avec BCB5 sous Windows 2000) qui manipule
une liste de grandeurs.
- Dans plusieurs fenetres, j'ai besoin d'avoir acces à ces grandeurs pour
diverses raison (en créer d'autre, les modifier, les intégrer dans d'autres
fonctionnalités, ...)
- Pour éviter d'écrire à chaque fois le code qui permet d'avoir acces à ces
grandeurs, je l'écris une fois pour toute dans, ce qu'appelle BCB, une frame
(une frame à la possibilité de pouvoir etre intégrée graphiquement à une
fenetre)
- pour que ma fenetre qui recoit cette frame puisse interagir avec elle, le
constructeur de la frame recoit en parametre une fonction membre de la
fenetre
- et quand j'ai sélectionné une grandeur, la frame appelle la fonction
membre de son conteneur à savoir la fenetre pour que celle-ci puisse
utiliser la grandeur sélectionnée.
-Comme je l'ai dit ci-dessus, cela ne marche que si cette fonction membre
est statique, mais du coup à l'interieur de cette fonction, je ne peux
réagir avec le reste de l'objet (la fenetre)


Comment résoudre ce probleme joliement ?

Merci pour votre aise,

PurL



Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Aug 05, 2004 4:08 pm    Post subject: Re: fonction membres statiques / callback Reply with quote



On Thu, 5 Aug 2004 17:40:23 +0200, "PurL" <purl-nospam (AT) chez (DOT) com>:

Quote:
Je bute toujours sur le meme probleme

Tu n'es pas le seul : y'a au moins un post par mois sur la même
question.

Typiquement, un système de callback se présente ainsi :

typedef .... Fonction;
void FctAvecCallback (Fonction callback, void* opaque,
parametres_divers);


et ton code doit ressembler à ceci :

struct C
{
void CallBack (parametres_divers);
static void static_CallBack (void *opaque, parametres_divers)
{ reinterpret_cast<C*>(opaque)-> CallBack (parametres_divers); }

void f()
{
FctAvecCallback (static_CallBack, this, ...);
}
};

Si tu veux plus d'infos, tout est là :
<http://www.google.com/advanced_group_search?hl=en>.


--
;-)

Back to top
Vincent Lascaux
Guest





PostPosted: Fri Aug 06, 2004 7:31 am    Post subject: Re: fonction membres statiques / callback Reply with quote



Quote:
Typiquement, un système de callback se présente ainsi :

typedef .... Fonction;
void FctAvecCallback (Fonction callback, void* opaque,
parametres_divers);

Ca m'etonne que tu n'aies pas donné la version C++

class callBack { public: virtual void run()=0; };
class hello : public callBack { public: void run() { std::cout << "Hello
world" << std::endl; } };
void FctAvecCallback(callBack* o) { o->run(); }

ou encore

template<class T>
void FctAvecCallback(T o) { o(); }

class hello { public : void operator() { std::cout << "Hello world" <<
std::endl; } };



Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Aug 06, 2004 8:25 am    Post subject: Re: fonction membres statiques / callback Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote

Quote:
On Thu, 5 Aug 2004 17:40:23 +0200, "PurL" <purl-nospam (AT) chez (DOT) com>:

Je bute toujours sur le meme probleme

Tu n'es pas le seul : y'a au moins un post par mois sur la même
question.

Typiquement, un système de callback se présente ainsi :

Très souvent, le système de callback exige une fonction « extern "C" ».

Quote:
typedef .... Fonction;
void FctAvecCallback (Fonction callback, void* opaque, parametres_divers);

et ton code doit ressembler à ceci :

struct C
{
void CallBack (parametres_divers);
static void static_CallBack (void *opaque, parametres_divers)
{ reinterpret_cast<C*>(opaque)-> CallBack (parametres_divers); }

void f()
{
FctAvecCallback (static_CallBack, this, ...);
}
};

Ce qui ne marche que si le FncAvecCallback est « extern "C++" ». Sinon,
il faut bien passer par une fonction libre.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
PurL
Guest





PostPosted: Fri Aug 06, 2004 11:59 am    Post subject: Re: fonction membres statiques / callback Reply with quote

Quote:
class callBack { public: virtual void run()=0; };
class hello : public callBack { public: void run() { std::cout
"Hello world" << std::endl; } };
void FctAvecCallback(callBack* o) { o->run(); }

Oui j'y ai bien pensé d'utiliser le systeme d'héritage.
Le probleme, c'est que sous builder, le debut de la classe descrptive de la
fenetre est :

class TfrmMaFenetre : public TForm

et si je rajoute :

class TfrmEditeurVariablesCalcul : public TForm, public callBack

BCB m'insulte car il ne retrouve plus la fenetre, mais bon ca c'est un autre
pb et c'est HS !

PurL



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.