explicite de la spécialisation du modèle de fonction membre de classe

J'ai besoin de spécialiser modèle de fonction de membre d'un certain type (disons double). Il fonctionne très bien tandis que la catégorie X lui-même n'est pas un modèle de classe, mais lorsque je fais de modèle GCC commence à donner des erreurs de compilation.

#include <iostream>
#include <cmath>

template <class C> class X
{
public:
   template <class T> void get_as();
};

template <class C>
void X<C>::get_as<double>()
{

}

int main()
{
   X<int> x;
   x.get_as();
}

voici le message d'erreur

source.cpp:11:27: error: template-id
  'get_as<double>' in declaration of primary template
source.cpp:11:6: error: prototype for
  'void X<C>::get_as()' does not match any in class 'X<C>'
source.cpp:7:35: error: candidate is:
  template<class C> template<class T> void X::get_as()

Comment puis-je régler ce problème et quel est le problème ici?

Merci d'avance.

  • ce qui est illégal dans la norme actuelle, à se spécialiser, vous devez vous spécialiser la classe ainsi...
  • mais cela fonctionne si la classe n'est pas un modèle. Est-il illégal trop?
  • non, c'est parfaitement bien, c'est uniquement pour les modèles de classe que cette règle s'applique (autant que je sache).
InformationsquelleAutor ledokol | 2011-04-01