Pb avec specialisation d'une methode template d'une classe non template
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:
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
Citation:
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:
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:
void SetImage<WORD> (*p_pImg)
ca compile :D mais a l'execution, l'appel a SetImage dans la version template re-appelle la version template (boucle sans fin et explosion mémoire) :cry:
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