template, pointeur de fonction et déclaration
Bonsoir,
je tombe sur un résultat étrange lors d'utilisation de pointeur de fonction generique.
J'utilise deux pointeurs de fonctions génériques de la forme suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| template<class T>
void AVLTree<T>::Fonction(T &data) {
cout << "val : " << data.getA().getX() << " "
<< data.getA().getY() << " "
<< data.getB().getX() << " "
<< data.getB().getY() << " "
<< "Type : " << data.getA().getType() << " "
<< "Num : " << data.getA().getNum() << endl;
}
template <class T>
void AVLTree<T>::GetNumSeg(T &data, QVector<T> &v, Point &p) {
if(data.getNum() == p.m_num_seg_1 ||
(data.getNum() == p.m_num_seg_2))
v.append(data);
} |
que je passe en tant que paramètre respectivement aux fonctions suivantes:
Code:
1 2 3 4 5
|
void parcours_prefixe(CNode<T> *, void (*f) (T &));
void parcours_prefixe_get(CNode<T> *, QVector<T> &, Point &,
void (*f) (T &, QVector<T> &, Point &)); |
Pour le premier template et pointeur de fonction, l'appel suivant est correct:
où sweep_line et un AVLTree<Segment>, getRacine() retourne un CNoeud<T> *
Code:
1 2
|
sweep_line.parcours_prefixe(sweep_line.getRacine(), Fonction); |
mais lorsque je fait l'appel de parcours_prefixe_get suivant:
Code:
1 2 3 4
|
sweep_line.parcours_prefixe_get(sweep_line.getRacine(),
twoseg, event,
GetNumSeg); |
j'obtiens une erreur de undefined alors que twoseg est bien un QVector<Segment>, event un point.
Est ce que l'erreur vient du fait que j'utilise des paramêtres passé à parcours_prefixe_get dans GetNumSeg ?
Merci de vos éclaircissements.