2016-10-22 3 views
2

Considérez le code suivant:Comment une classe de modèle hérite d'une classe de modèle imbriqué

template<class C, class P> 
//class Cchild : public C::NestedClass    // Works 
class Cchild : public C::NestedTemplateClass<P>  // Fails : how to inherit from nested template class defined in C ? 
{ 
}; 

compilateur compile très bien quand la classe de modèle Cchild hérite d'une classe imbriquée C::NestedClass. Toutefois, il ne parvient pas à compiler si je veux que Cchild hérite d'une classe de modèle imbriquée C::NestedTemplateClass<P>

Comment puis-je faire cela?

Répondre

3

La syntaxe est:

template<class C, class P> 
class Cchild : public C::template NestedTemplateClass<P> 
{ 
}; 

Le message d'erreur de gcc était assez lisible:

t.C:3:26: error: non-template ‘NestedTemplateClass’ used as template 
class Cchild : public C::NestedTemplateClass<P> 
          ^~~~~~~~~~~~~~~~~~~ 
t.C:3:26: note: use ‘C::template NestedTemplateClass’ to indicate that it is a template 
+0

Je pensais avoir essayé cette syntaxe, mais apparemment pas. Et oui, si j'utilisais 'gcc' au lieu de' vc', j'obtiendrais probablement la réponse dans le message d'erreur. Merci Sam. – shrike