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

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>);
};
Viewer.cpp

template <> void CViewer::SetImage<WORD> *p_pImg)
{
// SetImage for WORD image stuff
}
--> ne compile pas 'SetImage' : cannot be explicitly specialized


Si on ajoute la declaration suivante dans Viewer.h --> ca ne compile pas (internal compiler error)
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);
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
void SetImage<WORD> (*p_pImg)
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)

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