2012-12-24 4 views
8

Ich weiß, dass in C++ wir dies tun können:Wie gebe ich Template-Argumente an ein Objekt, das inline mit seiner Klasse erstellt wurde?

class A {} a; 

Dieses ein Objekt vom Typ macht A genannt a. Es entspricht:

A a; 

Ich fragte mich, wie ich das mit Vorlagen tun würde. Zum Beispiel:

template <typename T> struct N {} <int> n; 

Dies kompiliert nicht, aber Sie bekommen die Idee. Wie würde ich die Template-Argumente für ein Objekt angeben, das inline mit seiner Klassendefinition erstellt wurde? Ist das überhaupt möglich?

+0

ich nicht, dass es eine Syntax, die Sie todo das erlaubt. Obwohl Sie in der Lage sein können, Vorlagenspezialisierung und Instanziierungsobjekt auf originelle Art und Weise durchzuführen. – dchhetri

Antwort

2

Das Zeug nach dem Schließen } ein init-declarator-list nach der Norm bezeichnet wird.

14.3 verbietet ausdrücklich in Vorlage Klassendeklarationen verwendet werden:

In a template-declaration, explicit specialization, or explicit instantiation the init-declarator-list in the dec- laration shall contain at most one declarator. When such a declaration is used to declare a class template, no declarator is permitted.

+0

Ich habe gerade einen Fehler auf der Basis dieser Antwort gemeldet, weil er 'template <> struct A {} lulz;' zurückweist. –

1

Ich glaube nicht, dass Sie das tun können. Die Form, die du erwähnt hast, für Strukturen und Klassen wird von meinem Verständnis aus rückwärtskompatibel mit c gehalten - wo du das für Strukturen tun kannst.
Nette Idee, obwohl :)

1

Sie können Variablen nicht aus einer Vorlagedefinition deklarieren, nicht einmal wenn alle Vorlagenargumente Standardwerte haben.

Dies ist auch ein Fehler:

template <typename T = int> struct N {} n; 
Verwandte Themen