J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
--
Franck Branjonneau
pocky6@ifrance.com (Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
--
Franck Branjonneau <fasbjx@free.fr>
(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
--
Franck Branjonneau
"Franck Branjonneau" a écrit dans le message de
news:(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à la
compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste.
Array2D étant la classe mère de Image, je ne peux en déclarer une
instance au pif comme ça.... Cmt m'en sortir ?
"Franck Branjonneau" <fasbjx@free.fr> a écrit dans le message de
news:87u111koyd.fsf@alpha.tchume.net...
pocky6@ifrance.com (Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à la
compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste.
Array2D étant la classe mère de Image, je ne peux en déclarer une
instance au pif comme ça.... Cmt m'en sortir ?
"Franck Branjonneau" a écrit dans le message de
news:(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à la
compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste.
Array2D étant la classe mère de Image, je ne peux en déclarer une
instance au pif comme ça.... Cmt m'en sortir ?
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à
la compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste. Array2D étant la classe mère de Image, je ne peux en
déclarer une instance au pif comme ça....
Cmt m'en sortir ?
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à
la compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste. Array2D étant la classe mère de Image, je ne peux en
déclarer une instance au pif comme ça....
Cmt m'en sortir ?
Merci pour l'indication mais je n'arrive pas à venir à bout des erreurs à
la compil. J'ai essayé de rajouter Array2D<TCell>:: à la déclaration comme
indiqué, ça entraîne l'impossibilité de retrouver depuis l'appel dans le
constructeur de Image la fonction SelectFunc.
Seconde conséquence, dans une fonction membre de Image j'ai droit à "must
use .* or -> to call pointer-to-member function" ce qui semble être bon
signe mais quoi que j'essaie (this.*GetAt, this->GetAt, etc) rien n'y fait
l'erreur reste. Array2D étant la classe mère de Image, je ne peux en
déclarer une instance au pif comme ça....
Cmt m'en sortir ?
"Franck Branjonneau" a écrit dans le message de
news:(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
"Franck Branjonneau" <fasbjx@free.fr> a écrit dans le message de
news:87u111koyd.fsf@alpha.tchume.net...
pocky6@ifrance.com (Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
"Franck Branjonneau" a écrit dans le message de
news:(Etienne Lemieux) écrivait:
J'ai une classe du genre
//Array2D.h
template <class TCell> class Array2D<TCell> {
....
public:
TCell GetAt1(int x, int y) {...};
TCell GetAt2(int x, int y) {...};
TCell GetAt3(int x, int y) {...};
TCell (*GetAt)(int, int);
}
//Image.h
class Image:public Array2D<Couleur> {...}
GetAt est censée pouvoir choisir de prendre une "valeur" parmi GetAt1,
GetAt2 et GetAt3, directement, de manière à éviter une sélection entre
les méthodes (vu qu'elle est appelée souvent...). Ayant échoué à
l'initialiser dans le constructeur de Array2D (GetAt=GetAt1; ou
GetAt=&GetAt1; me donnent des erreurs) j'ai tenté de rajouter :
void SelectFunc(TCell (*f)(int, int)) { GetAt=f; } (avec ou sans &)
qui compile bien jusqu'à ce que je l'appelle qq part (constructeur de
Array2D ou de Image), dans Image par ex. parce qu'il ne trouve pas de
fonction correspondant à GetAt1 (passée en paramètre) alors qu'elle
est définie dans la classe héritée.
Le C++ distingue deux types de pointeurs : les pointeurs et les
pointeurs sur membres (non statiques). C'est les seconds qu'il te faut
puisque GetA1, GetA2 et GetA3 sont des fonctions.
Tu écris donc :
TCell (Array2D::*GetAt)(int, int);
Un tel pointeur nécessite un objet pour être déréfencé (son this) :
Array2D a;
a.*GetAt(0, 0)
Je vais essayer d'être plus clair (après avoir lu les réponses de Franck
et Anthony):
Array2D est une template class qui sert surtout d'usine à classes, elle
n'est jamais instanciée directement (du moins c pas prévu). Le
constructeur est de la forme :
Array2D<TCell>(int width, int height):w(width), h(height), X {
X;
}
avec soit GetAt(GetAt1) à la place du premier X, soit une initialisation à
la place du deuxieme, si c'est possible. GetAt n'est pas constante mais a
une valeur par défaut prédéterminée par moi (cad GetAt1). Je ne veux donc
pas le faire passer en paramètre du constructeur.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
La fonction qui prend en paramètre GetAt2 et doit dire à GetAt de pointer
vers elle, bloque à la compil, d'où que je l'appelle. (j'ai essayé plein
d'écritures). En général elle doit être appelable en interne au moins par
les classes dérivées. Là mon instance de Image ne fait qu'appeler des
méthodes qui elles mêmes tentent d'appeler SelectFunc, et d'utiliser le
GetAt ainsi modifié.
Je vais essayer d'être plus clair (après avoir lu les réponses de Franck
et Anthony):
Array2D est une template class qui sert surtout d'usine à classes, elle
n'est jamais instanciée directement (du moins c pas prévu). Le
constructeur est de la forme :
Array2D<TCell>(int width, int height):w(width), h(height), X {
X;
}
avec soit GetAt(GetAt1) à la place du premier X, soit une initialisation à
la place du deuxieme, si c'est possible. GetAt n'est pas constante mais a
une valeur par défaut prédéterminée par moi (cad GetAt1). Je ne veux donc
pas le faire passer en paramètre du constructeur.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
La fonction qui prend en paramètre GetAt2 et doit dire à GetAt de pointer
vers elle, bloque à la compil, d'où que je l'appelle. (j'ai essayé plein
d'écritures). En général elle doit être appelable en interne au moins par
les classes dérivées. Là mon instance de Image ne fait qu'appeler des
méthodes qui elles mêmes tentent d'appeler SelectFunc, et d'utiliser le
GetAt ainsi modifié.
Je vais essayer d'être plus clair (après avoir lu les réponses de Franck
et Anthony):
Array2D est une template class qui sert surtout d'usine à classes, elle
n'est jamais instanciée directement (du moins c pas prévu). Le
constructeur est de la forme :
Array2D<TCell>(int width, int height):w(width), h(height), X {
X;
}
avec soit GetAt(GetAt1) à la place du premier X, soit une initialisation à
la place du deuxieme, si c'est possible. GetAt n'est pas constante mais a
une valeur par défaut prédéterminée par moi (cad GetAt1). Je ne veux donc
pas le faire passer en paramètre du constructeur.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
La fonction qui prend en paramètre GetAt2 et doit dire à GetAt de pointer
vers elle, bloque à la compil, d'où que je l'appelle. (j'ai essayé plein
d'écritures). En général elle doit être appelable en interne au moins par
les classes dérivées. Là mon instance de Image ne fait qu'appeler des
méthodes qui elles mêmes tentent d'appeler SelectFunc, et d'utiliser le
GetAt ainsi modifié.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
Non non, comme l'a dit Franck Branjonneau des pointeurs de fonction et des
pointeurs de fonctions membres sont différents. Le pointeur de fonction
membre dépend de l'instanciation de la classe, qui a son this.
Il est donc du type :
TCell (Array2D::*GetAt)(int,int)
Oups ça c'était une faute d'inattention. Faut dire je suis pas très à l'aise
Ensuite comme tu es dans ta classe, tu peux appeler la fonction pointée
par :
(this->*GetAt)(x,y);
là j'avoue qu'il faudra que j'en trouve plus sur les pointeurs de fonction
Petit exemple pour être un peu plus clair :
Merci bcp, j'ai trouvé tout ce dont j'avais besoin dans ce "petit" exemple
En esperant que c'est clair et que ca réponde au problème.
ça le résout oui :) Me reste à approfondir le sujet maintenant.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
Non non, comme l'a dit Franck Branjonneau des pointeurs de fonction et des
pointeurs de fonctions membres sont différents. Le pointeur de fonction
membre dépend de l'instanciation de la classe, qui a son this.
Il est donc du type :
TCell (Array2D::*GetAt)(int,int)
Oups ça c'était une faute d'inattention. Faut dire je suis pas très à l'aise
Ensuite comme tu es dans ta classe, tu peux appeler la fonction pointée
par :
(this->*GetAt)(x,y);
là j'avoue qu'il faudra que j'en trouve plus sur les pointeurs de fonction
Petit exemple pour être un peu plus clair :
Merci bcp, j'ai trouvé tout ce dont j'avais besoin dans ce "petit" exemple
En esperant que c'est clair et que ca réponde au problème.
ça le résout oui :) Me reste à approfondir le sujet maintenant.
GetAt est donc du type TCell (*GetAt)(int, int); et tous les GetAti
prennent deux int et renvoient un TCell
Non non, comme l'a dit Franck Branjonneau des pointeurs de fonction et des
pointeurs de fonctions membres sont différents. Le pointeur de fonction
membre dépend de l'instanciation de la classe, qui a son this.
Il est donc du type :
TCell (Array2D::*GetAt)(int,int)
Oups ça c'était une faute d'inattention. Faut dire je suis pas très à l'aise
Ensuite comme tu es dans ta classe, tu peux appeler la fonction pointée
par :
(this->*GetAt)(x,y);
là j'avoue qu'il faudra que j'en trouve plus sur les pointeurs de fonction
Petit exemple pour être un peu plus clair :
Merci bcp, j'ai trouvé tout ce dont j'avais besoin dans ce "petit" exemple
En esperant que c'est clair et que ca réponde au problème.
ça le résout oui :) Me reste à approfondir le sujet maintenant.