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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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