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 mais a l'execution, l'appel a SetImage dans la version template re-appelle la version template (boucle sans fin et explosion mémoire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part void SetImage<WORD> (*p_pImg)
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
Partager