Bonjour,
j'ai un pb avec la specialisation d'une methode template d'une classe non template. C'est illustré ci-dessous.
(Compilateur : VS2005)
Viewer.h
Viewer.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class CViewer { public : template <typename TYPE> void SetImage(CImage<TYPE> *p_pImg); { CImage<WORD> *m_pImg = Convert(p_pImg); SetImage(m_pImg); }; protected : CImage<WORD> *m_pImg; template <typename TYPE> CImage<WORD> * Convert(CImage<TYPE>); };
--> ne compile pas 'SetImage' : cannot be explicitly specializedtemplate <> void CViewer::SetImage<WORD> *p_pImg)
{
// SetImage for WORD image stuff
}
Si on ajoute la declaration suivante dans Viewer.h --> ca ne compile pas (internal compiler error)
Si je surcharge SetImage de la sorte (decalaration dans Viewer.h et implementation dans Viewer.cpp):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template <> void SetImage<C3DSlicer::TValue>(const CSmartPtr<C3DSlicer::TImage3D> &p_pImg,int p_ViewID=-1);
ca compile
Code : Sélectionner tout - Visualiser dans une fenêtre à part void SetImage<WORD> (*p_pImg)mais a l'execution, l'appel a SetImage dans la version template re-appelle la version template (boucle sans fin et explosion mémoire)
Je ne vois pas ce qui est faux (soit dans le code ou quelque chose que je n'ai pas compris en C++).
Quelqu'un peut-il m'aider ? aide/questions enfin tout ce qui peut faire avancer le Schimblick
V





Répondre avec citation







Partager