Et là ça se corse, comment fais-je pour appeler la fonction pointée dans
tab_machin[0] ?
Je serais bien tenté par : "tab_machin[0].fonction(10);" façon C, mais
j'obtiens le message :
"Appel d'une non fonction" (j'utilise Borland c++ builder 4).
Les pointeurs vers functions membres sont déréférencés avec les opérateurs .* (si on a une référence vers l'objet) et ->* (avec un pointeur vers l'objet).
Si tu veux faire cet appel dans toto::bidule():
(this->*tab_machin[0].function)(10);
-- Frédéric Lachasse -
"Thierry Schembri" <tschembri@hydromail.net> wrote in message
news:bmkjn7$89p$1@news-reader1.wanadoo.fr...
J'ai un petit problème avec des pointeurs de fonctions, est-ce que
quelqu'un
pourrait m'aider ?
Voici le problème :
J'ai une classe toto (la fameuse)
class toto
{
typedef struct machin
{
int a;
int (toto::*fonction)(int);
}MACHIN;
Et là ça se corse, comment fais-je pour appeler la fonction pointée
dans
tab_machin[0] ?
Je serais bien tenté par : "tab_machin[0].fonction(10);" façon C,
mais
j'obtiens le message :
"Appel d'une non fonction" (j'utilise Borland c++ builder 4).
Les pointeurs vers functions membres sont déréférencés avec les opérateurs
.* (si on a une référence vers l'objet) et ->* (avec un pointeur vers
l'objet).
Et là ça se corse, comment fais-je pour appeler la fonction pointée dans
tab_machin[0] ?
Je serais bien tenté par : "tab_machin[0].fonction(10);" façon C, mais
j'obtiens le message :
"Appel d'une non fonction" (j'utilise Borland c++ builder 4).
Les pointeurs vers functions membres sont déréférencés avec les opérateurs .* (si on a une référence vers l'objet) et ->* (avec un pointeur vers l'objet).
Si tu veux faire cet appel dans toto::bidule():
(this->*tab_machin[0].function)(10);
-- Frédéric Lachasse -
Gourgouilloult
Frederic Lachasse wrote:
(this->*tab_machin[0].function)(10);
J'ai cru comprendre dans un autre post que les parenthèses autour de l'expression donnant le pointeur de fonction étaient nécessaires. Par contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
Gourgou
Frederic Lachasse wrote:
(this->*tab_machin[0].function)(10);
J'ai cru comprendre dans un autre post que les parenthèses autour de
l'expression donnant le pointeur de fonction étaient nécessaires. Par
contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
J'ai cru comprendre dans un autre post que les parenthèses autour de l'expression donnant le pointeur de fonction étaient nécessaires. Par contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
Gourgou
Cyrille Karmann
Thierry Schembri disait...
J'ai une classe toto (la fameuse)
class toto { typedef struct machin { int a; int (toto::*fonction)(int); }MACHIN;
Et là ça se corse, comment fais-je pour appeler la fonction pointée dans tab_machin[0] ?
Je serais bien tenté par : "tab_machin[0].fonction(10);" façon C, mais j'obtiens le message :
"Appel d'une non fonction" (j'utilise Borland c++ builder 4).
fonction est un pointeur de fonction *membre* de toto. Il faut donc l'appliquer à un objet toto.
donc: toto instance_toto; (instance_toto.*tab_machin[0].fonction)(10);
ou encore, si tu es déjà dans une fonction membre de toto: (this->*tab_machin[0].fonction)(10);
-- Cyrille A Marco!
Frederic Lachasse
"Gourgouilloult" <gourgou_at_club-internet_point_fr> wrote in message news:3f8e53f5$0$15437$
Frederic Lachasse wrote:
(this->*tab_machin[0].function)(10);
J'ai cru comprendre dans un autre post que les parenthèses autour de l'expression donnant le pointeur de fonction étaient nécessaires. Par contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
Simple: priorité des opérateurs. ->* et .* sont moins prioritaire que ->, ., () et [] (qui ont la même priorité, d'ailleurs).
Donc sans les parenthèses: this->*tab_machin[0].function(10) est interprété comme: this->*(tab_machin[0].function(10)) et comme ->, ., () et [] sont évalués de gauche à droite: this->*(((tab_machin[0]).function)(10))
Avec les parenthèses: (this->*tab_machin[0].function)(10);
est interprété comme: (this->*(tab_machin[0].function))(10);
et comme ->, ., () et [] sont évalués de gauche à droite: (this->*((tab_machin[0]).function))(10);
Ce qui ne donne pas le même résultat.
-- Frédéric Lachasse -
"Gourgouilloult" <gourgou_at_club-internet_point_fr> wrote in message
news:3f8e53f5$0$15437$7a628cd7@news.club-internet.fr...
Frederic Lachasse wrote:
(this->*tab_machin[0].function)(10);
J'ai cru comprendre dans un autre post que les parenthèses autour de
l'expression donnant le pointeur de fonction étaient nécessaires. Par
contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
Simple: priorité des opérateurs. ->* et .* sont moins prioritaire que ->, .,
() et [] (qui ont la même priorité, d'ailleurs).
Donc sans les parenthèses:
this->*tab_machin[0].function(10)
est interprété comme:
this->*(tab_machin[0].function(10))
et comme ->, ., () et [] sont évalués de gauche à droite:
this->*(((tab_machin[0]).function)(10))
Avec les parenthèses:
(this->*tab_machin[0].function)(10);
est interprété comme:
(this->*(tab_machin[0].function))(10);
et comme ->, ., () et [] sont évalués de gauche à droite:
(this->*((tab_machin[0]).function))(10);
"Gourgouilloult" <gourgou_at_club-internet_point_fr> wrote in message news:3f8e53f5$0$15437$
Frederic Lachasse wrote:
(this->*tab_machin[0].function)(10);
J'ai cru comprendre dans un autre post que les parenthèses autour de l'expression donnant le pointeur de fonction étaient nécessaires. Par contre, j'ai pas compris pourquoi. Quelqu'un peut me dire ?
Simple: priorité des opérateurs. ->* et .* sont moins prioritaire que ->, ., () et [] (qui ont la même priorité, d'ailleurs).
Donc sans les parenthèses: this->*tab_machin[0].function(10) est interprété comme: this->*(tab_machin[0].function(10)) et comme ->, ., () et [] sont évalués de gauche à droite: this->*(((tab_machin[0]).function)(10))
Avec les parenthèses: (this->*tab_machin[0].function)(10);
est interprété comme: (this->*(tab_machin[0].function))(10);
et comme ->, ., () et [] sont évalués de gauche à droite: (this->*((tab_machin[0]).function))(10);