2009-03-09 15 views
0

ich dies zu kompilieren versuchen:Vorlage Standardargument in einer Vorlage

template <class T, class U = myDefaultUClass<T> > 
class myClass{ 
... 
}; 

Obwohl es recht intuitiv zu mir scheint es, ist nicht für meinen Compiler, hat jemand weiß, wie dies zu tun?

bearbeiten: Ok, das Problem kam eigentlich nicht von diesem aber von einem Restversuch ... Tut mir leid, danke für deine Antworten trotzdem.

Antwort

6

Die folgenden Werke für mich mit g ++. Bitte poste mehr Code, die Fehlermeldungen die du bekommst und die Compiler Version.

class A {}; 

template <class T> class T1 {}; 

template <class T, class U = T1<T> > class T2 { 
}; 

T2 <A> t2; 
+0

Und der Compiler Info. – Anonymous

+0

Ich benutze auch g ++, ich glaube ich habe mich zu sehr vereinfacht, lass mich herausfinden warum – Ben

3

Compiliert fein mit Comeau ...

0

Das auf MSVC funktioniert 9.0:

template < class T > 
class UClass 
{ 
private: 
    T m_data; 
}; 

template < class T, class U = UClass<T> > 
class MyClass 
{ 
public: 
    const U& data() const { return m_data; } 
private: 

    U m_data; 
}; 


int main() 
{ 
    MyClass<int> test; 

    const UClass<int>& u = test.data(); 

    return 0; 
} 
0

Es ist entweder, dass Ihr Compiler nicht Standard Beschwerde ist, oder Sie aus einem dieser Fehler:

  1. myDefaultUClass nicht eine Vorlage
  2. myDefaultUClass ist nicht definiert

, da die folgenden funktioniert gut in G ++:

class myDefaultUClass{}; 

template <class T, class U = myDefaultUClass > 
class myClass{ 
//... 
}; 
Verwandte Themen