Standardargument für Template
-
Verständnisfrage zu Templates:
Ich habe folgende Templateklasse:
template <typename T = int> class Test {};Mit dem Standardargument beabsichtige ich eigentlich, Folgendes schreiben zu können:
Test t;Der Compiler beschwert sich natürlich, dass Templateargumente fehlen und folgende Syntax ist völlig zulässig:
Test<> t;Nun wüsste ich gern, ob es eine Möglichkeit gibt, erstere Syntax geltend zu machen, um Kunden meiner Klassen die Nutzung zu erleichtern.
-
Nein, nicht direkt. Du könntest aber ein typedef benutzen.
Du hast übrigens ein Klassentemplate, keine Template-Klasse.
-
Kellerautomat schrieb:
Nein, nicht direkt. Du könntest aber ein typedef benutzen.
Danke, dann müsste ich mir wohl für die das Klassentemplate oder die Spezialisierung einen anderen Namen überlegen.
Macht die Standard Library das genauso?
Beispiel:typedef std::basic_string<char> std::string;Kellerautomat schrieb:
Du hast übrigens ein Klassentemplate, keine Template-Klasse.
Danke, werde es mir merken.
-
template-newbie schrieb:
Macht die Standard Library das genauso?
Beispiel:typedef std::basic_string<char> std::string;Fast.
namespace std { typedef basic_string<char, char_traits<char>, allocator<char>> string; }:p
-
Aus GNUs libstdc++:
bits/stringfwd.h schrieb:
typedef basic_string<char> string;Natürlich innerhalb des Namensraums std. Die beiden Varianten sind beide möglich, weil sie äquivalent sind - basic_string bringt für die Traits- und Allokator-Parameter Default-Werte mit.