2010-02-20 6 views
4

J'ai un problème avec la syntaxe requise pour initialiser un membre statique dans un modèle de classe. Voici le code (j'ai essayé de réduire autant que possible):Initialiser le membre statique de la classe interne du modèle

template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B 
    { 
    static T1 b; 
    }; 

    B<T> b; 
    typedef B<T> BT; 
    T val() { return b.b; } 
}; 

template <typename T> 
T A<T>::BT::b; 

struct D 
{ 
    D() : d(0) {} 
    int d; 
}; 

int main() 
{ 
    A<D> a; 
    return a.val().d; 
} 

Avec g++, l'erreur que je reçois est:

error: too few template-parameter-lists 

Toutes les idées comment initialiser b? Notez que je voudrais garder le typedef, comme dans mon code réel, B est beaucoup plus complexe que cela.

Répondre

6

Modifier la définition de b à ce qui suit:

template <typename T> template<typename T1> 
T1 A<T>::B<T1>::b; 

Notez que le typedef et B<T1> ne précisent pas nécessairement le même type: Alors que le typedef repose sur T étant passé à B, B<T1> repose sur la paramètre de modèle T1 étant passé. Vous ne pouvez donc pas utiliser le typedef ici pour spécifier une définition pour b dans B<T1>.

+0

Gr, je t'ai presque battu :(Un jour. – GManNickG

Questions connexes