slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
"sentenza" <sentenza9@club-internet.fr> a écrit dans le message de news:
3fd5d94d$0$6970$7a628cd7@news.club-internet.fr...
slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
"sentenza" <sentenza9@club-internet.fr> a écrit dans le message de news:
3fd5d94d$0$6970$7a628cd7@news.club-internet.fr...
slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir comme
du polymorphisme, avec un bon design de classes (et par ex des DP stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de "collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
Le Géant Vert wrote:"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de
cette
classe, autrement dit, une méthode de proto void m(void) dans une classe
A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans
une
meme structure de données... à moins d'encapsuler tes pointeurs dans des
SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir
comme
du polymorphisme, avec un bon design de classes (et par ex des DP
stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de
"collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
pfff .. j'ai encore une erreur de compile .. je suppose que tu m'as
montre la facon de faire pour une class simple, mais moi c'est une class
template que j'utilise qui est prototypee comme ceci :
template <template <typename> class C, typename E>
class VM
{
....
void Push(char*);
};
et mon tableau de pointeur sur fonction comme ca :
typedef void (VM::*f1)();
typedef void (VM::*f2)(char*);
struct t_filefunc
{
char *name;
f1 func;
f2 funcarg;
};
t_filefunc functab[] = {
{"push", 0, VM::Push},
{0, 0} };
le compilo me pond cette erreur : parse error before `::' et ca survient
a la declaration des typedef ...
je suppose que c'est surement a cause du template, mais je ne vois pas
comment faire :/
--
char sentenza9[] > "xebx0dx5fx31xc0x50x89xe2"
"x52x57x54xb0x3bxcdx80xe8"
"xeexffxffxff/bin/sh";
Le Géant Vert wrote:
"sentenza" <sentenza9@club-internet.fr> a écrit dans le message de news:
3fd5d94d$0$6970$7a628cd7@news.club-internet.fr...
slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de
cette
classe, autrement dit, une méthode de proto void m(void) dans une classe
A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans
une
meme structure de données... à moins d'encapsuler tes pointeurs dans des
SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir
comme
du polymorphisme, avec un bon design de classes (et par ex des DP
stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de
"collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
pfff .. j'ai encore une erreur de compile .. je suppose que tu m'as
montre la facon de faire pour une class simple, mais moi c'est une class
template que j'utilise qui est prototypee comme ceci :
template <template <typename> class C, typename E>
class VM
{
....
void Push(char*);
};
et mon tableau de pointeur sur fonction comme ca :
typedef void (VM::*f1)();
typedef void (VM::*f2)(char*);
struct t_filefunc
{
char *name;
f1 func;
f2 funcarg;
};
t_filefunc functab[] = {
{"push", 0, VM::Push},
{0, 0} };
le compilo me pond cette erreur : parse error before `::' et ca survient
a la declaration des typedef ...
je suppose que c'est surement a cause du template, mais je ne vois pas
comment faire :/
--
char sentenza9[] > "xebx0dx5fx31xc0x50x89xe2"
"x52x57x54xb0x3bxcdx80xe8"
"xeexffxffxff/bin/sh";
Le Géant Vert wrote:"sentenza" a écrit dans le message de news:
3fd5d94d$0$6970$slt,
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
un pointeur vers une méthode d'une classe est préfixée par le nom de
cette
classe, autrement dit, une méthode de proto void m(void) dans une classe
A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans
une
meme structure de données... à moins d'encapsuler tes pointeurs dans des
SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
à mon humble avis, éviter des if() else if() en C++ peut se concevoir
comme
du polymorphisme, avec un bon design de classes (et par ex des DP
stratégy),
ça doit pouvoir se faire de manière transparente. L'idée de
"collectionner"
des pointeurs sur méthodes, ça me fait un peu penser à vouloir
court-circuiter les mécanismes objet du langage.
pfff .. j'ai encore une erreur de compile .. je suppose que tu m'as
montre la facon de faire pour une class simple, mais moi c'est une class
template que j'utilise qui est prototypee comme ceci :
template <template <typename> class C, typename E>
class VM
{
....
void Push(char*);
};
et mon tableau de pointeur sur fonction comme ca :
typedef void (VM::*f1)();
typedef void (VM::*f2)(char*);
struct t_filefunc
{
char *name;
f1 func;
f2 funcarg;
};
t_filefunc functab[] = {
{"push", 0, VM::Push},
{0, 0} };
le compilo me pond cette erreur : parse error before `::' et ca survient
a la declaration des typedef ...
je suppose que c'est surement a cause du template, mais je ne vois pas
comment faire :/
--
char sentenza9[] > "xebx0dx5fx31xc0x50x89xe2"
"x52x57x54xb0x3bxcdx80xe8"
"xeexffxffxff/bin/sh";
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
un pointeur vers une méthode d'une classe est préfixée par le nom de cette
classe, autrement dit, une méthode de proto void m(void) dans une classe A
et une autre dans une classe B sont considérées de types DIFFERENTS,
respectivement :
void A::*(void), et :
void B::*(void)
donc tu vas avoir du mal à mixer plusieurs pointeurs de méthodes dans une
meme structure de données... à moins d'encapsuler tes pointeurs dans des SD
génériques et de retenir des infos les concernants pour les caster
joyeusement au moment opportun, mais là ca devient super tordu...
Il y a des choses pour simplifier ça. Par exemple boost::function et
boost::bind sur www.boost.org.
Il y a des choses pour simplifier ça. Par exemple boost::function et
boost::bind sur www.boost.org.
Il y a des choses pour simplifier ça. Par exemple boost::function et
boost::bind sur www.boost.org.
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
ce que j'ai essaye de faire, mais sans succes :
template<typename T>
class MaClass
{
private:
std::auto_ptr< Container<T> > m_container;
public:
explicit MaClass(std::list<T> * stlContainer)
:m_container(new StlAdaptor< std::list<T> >(stlContainer)){ }
explicit MaClass(std::set<T> * stlContainer)
:m_container(new StlAdaptorSet< std::set<T> >(stlContainer)){ }
explicit MaClass(std::vector<T> * stlContainer)
:m_container(new StlAdaptor< std::vector<T> >(stlContainer)){ }
void Add(const T & value) { m_container->Add(value); }
void Sub(const T & value) { m_container->Sub(value); }
void Pop() { m_container->Pop(); }
};
struct t_functab
{
char *str;
void (MaClass::*f)();
};
t_functab functab[] = {
{"Add", MaClass::Add},
{"Sub", MaClass::Sub},
{"Pop", MaClass::Pop},
{0, 0};
};
c'est surement pas comme ca
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
ce que j'ai essaye de faire, mais sans succes :
template<typename T>
class MaClass
{
private:
std::auto_ptr< Container<T> > m_container;
public:
explicit MaClass(std::list<T> * stlContainer)
:m_container(new StlAdaptor< std::list<T> >(stlContainer)){ }
explicit MaClass(std::set<T> * stlContainer)
:m_container(new StlAdaptorSet< std::set<T> >(stlContainer)){ }
explicit MaClass(std::vector<T> * stlContainer)
:m_container(new StlAdaptor< std::vector<T> >(stlContainer)){ }
void Add(const T & value) { m_container->Add(value); }
void Sub(const T & value) { m_container->Sub(value); }
void Pop() { m_container->Pop(); }
};
struct t_functab
{
char *str;
void (MaClass::*f)();
};
t_functab functab[] = {
{"Add", MaClass::Add},
{"Sub", MaClass::Sub},
{"Pop", MaClass::Pop},
{0, 0};
};
c'est surement pas comme ca
Pr ne pas utiliser des if () else if() ... j'ai besoin d'utiliser un
tableau de pointeur de fonction.
Comment fait ton pour construir un tableau de pointeur de fonction qui
pointe vers des methodes d'une classe ?
ce que j'ai essaye de faire, mais sans succes :
template<typename T>
class MaClass
{
private:
std::auto_ptr< Container<T> > m_container;
public:
explicit MaClass(std::list<T> * stlContainer)
:m_container(new StlAdaptor< std::list<T> >(stlContainer)){ }
explicit MaClass(std::set<T> * stlContainer)
:m_container(new StlAdaptorSet< std::set<T> >(stlContainer)){ }
explicit MaClass(std::vector<T> * stlContainer)
:m_container(new StlAdaptor< std::vector<T> >(stlContainer)){ }
void Add(const T & value) { m_container->Add(value); }
void Sub(const T & value) { m_container->Sub(value); }
void Pop() { m_container->Pop(); }
};
struct t_functab
{
char *str;
void (MaClass::*f)();
};
t_functab functab[] = {
{"Add", MaClass::Add},
{"Sub", MaClass::Sub},
{"Pop", MaClass::Pop},
{0, 0};
};
c'est surement pas comme ca
sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]
}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
sentenza <sentenza9@club-internet.fr> wrote in message
news:<3fd5d94d$0$6970$7a628cd7@news.club-internet.fr>...
template<typename T>
class MaClass
{
[...]
}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]
}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
wrote:sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ? Il me semble avoir lu qu'on ne pouvait appeler que les
membres statiques de cette façon.
kanze@gabi-soft.fr wrote:
sentenza <sentenza9@club-internet.fr> wrote in message
news:<3fd5d94d$0$6970$7a628cd7@news.club-internet.fr>...
template<typename T>
class MaClass
{
[...]
}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ? Il me semble avoir lu qu'on ne pouvait appeler que les
membres statiques de cette façon.
wrote:sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ? Il me semble avoir lu qu'on ne pouvait appeler que les
membres statiques de cette façon.
wrote:sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ?
Il me semble avoir lu qu'on ne pouvait appeler que les membres
statiques de cette façon.
kanze@gabi-soft.fr wrote:
sentenza <sentenza9@club-internet.fr> wrote in message
news:<3fd5d94d$0$6970$7a628cd7@news.club-internet.fr>...
template<typename T>
class MaClass
{
[...]
}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ?
Il me semble avoir lu qu'on ne pouvait appeler que les membres
statiques de cette façon.
wrote:sentenza wrote in message
news:<3fd5d94d$0$6970$...template<typename T>
class MaClass
{
[...]}
- Il faut que toutes les fonctions aient la même signature : tu ne
peux pas initialiser un « void (MaClass::*)() » avec &MaClass::Add,
parce que &MaClass::Add a le type « void (MaClass::*)( T& ) ». La
raison en est simple : comment est-ce que tu compte utiliser le
pointeur ? Si tu as :
void (MaClass<int>::*f)() = &MaClass<int>::Pop ;
il faut écrire :
(p->*f)() ;
sans paramètre. Si tu as :
void (MaClass<int>::*f)( int& ) = &MaClass<int>::Add ;
il faut écrire :
(p->*f)( 42 ) ;
Ca marche ça ?
Il me semble avoir lu qu'on ne pouvait appeler que les membres
statiques de cette façon.