Spécialisation totale d'une sous-classe template.
Bonjour.
Je cherche actuellement à réussir la spécialisation d'une méthode membre d'une sous-classe template :
la déclaration de la classe étant la suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| template <int HiTime>
class Cv_Acquisition : Base_Acquisition<CvCapture*>
{
[...]
private :
template <bool positive>
class WaitOp
{
void operator()() const;//méthode à spécialiser
};
[...]
}; |
et l'implémentation de l'opérateur en question:
Code:
1 2 3 4 5 6
| template <int HiTime>
template <bool positive>
void Cv_Acquisition<HiTime>::WaitOp<positive>::operator()() const
{
[...]
} |
Jusqu'ici, pas de problème. mais lorsque j'essaye d'écrire une spécialisation, tout dérape.
En effet, le code
Code:
1 2 3 4 5
| template <int HiTime>
template <>
void Cv_Acquisition<HiTime>::WaitOp<false>::operator()()
{
} |
me renvoie les erreurs:
Citation:
Envoyé par gcc 4.4.1
[...]
/.../Cv_Acquisition.hpp:47: error: invalid explicit specialization before ‘>’ token
/.../Cv_Acquisition.hpp:47: error: enclosing class templates are not explicitly specialized
/.../Cv_Acquisition.hpp:48: error: invalid use of incomplete type ‘class Cv_Acquisition<HiTime>::WaitOp<false>’
/.../Acquisition.h:91: error: declaration of ‘class Cv_Acquisition<HiTime>::WaitOp<false>’
Process terminated with status 1 (0 minutes, 2 seconds)
4 errors, 0 warnings
et si je tente de mettre la spécialisation directement apres la sous classe comme suit:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| template <int HiTime>
class Cv_Acquisition : Base_Acquisition<CvCapture*>
{
[...]
private :
template <bool positive>
class WaitOp
{
void operator()() const;
};
//SPECIALISATION
template <>
void WaitOp<false>::operator()() const
{
[...]
}
[...]
}; |
j'ai alors droit à l'ereur:
Citation:
Envoyé par gcc 4.4.1
[...]
/.../Acquisition.h:94: error: explicit specialization in non-namespace scope ‘class Cv_Acquisition<HiTime>’
/.../Acquisition.h:95: error: invalid use of incomplete type ‘class Cv_Acquisition<HiTime>::WaitOp<false>’
/.../Acquisition.h:91: error: declaration of ‘class Cv_Acquisition<HiTime>::WaitOp<false>’
Process terminated with status 1 (0 minutes, 2 seconds)
3 errors, 0 warnings
J'avoue ne pas du tout comprendre la raison de ce refus du compilateur... si quelqu'un a une idee....
merci :)