2017-05-03 4 views
2

J'ai deux classes de modèle comme externes et internes. Je suis type de casting à la classe interne de l'autre objet de classe interne. Je reçois une erreur de compilation. Comment résoudre ceci?Comment utiliser la conversion de réinterprétation pour la classe de modèle interne?

template<typename O> 
struct outer 
{ 
    template<typename I> 
     struct inner 
     { 
     }; 

    inner<int> *ptr; 
    outer(); 

}; 

    template<typename O,typename I> 
void callme() 
{ 
    reinterpret_cast< outer<O>::inner<I> *>(NULL); 
} 

Répondre

4

Vous voulez:

reinterpret_cast<typename outer<O>::template inner<I> *>(nullptr); 
//    ^^^^^^^^   ^^^^^^^^    ^^^^^^^ 

Les noms outer et inner sont des noms dépendants (ils dépendent des arguments de modèle), et par conséquent, vous devez spécifier explicitement leur "nature" (valeur, type, modèle).

+0

Très bien. Pourquoi nous avons besoin de mettre le modèle dans 'template inner '? –

+1

Parce que 'inner' est un nom dépendant, vous devez donc en désambiguïser le type. –