Ich finde etwas nervig in C++ und ich weiß nicht, ob es einen Trick gibt, um dies ohne Overhead zu vermeiden. Das Problem ist folgendes:Warum müssen wir <> für eine Vorlagenklasse mit Standardparametern angeben?
Für eine Template-Funktion, können wir haben:
// Function declaration/definition
template<bool Option = false> void myFunction()
{
std::cout<<"Option = "<<Option<<std::endl;
}
// Then I can use :
myFunction<false>();
myFunction<true>();
myFunction(); // <- NO PROBLEM HERE
Jetzt für eine Template-Klasse:
// Class definition/declaration
template<bool Option = false> class MyClass
{
};
// Then I can use :
myClass<false> x;
myClass<true> y;
myClass z; // <- PROBLEM HERE : only "MyClass<> z;" will compile !
Warum der Grund für dieses Verhalten ist? Gibt es einen Trick, um das zu vermeiden? Für eine Klasse mit Optionnal Parameter als Template übergeben, finde ich dies für den Endverbraucher nicht praktisch: er in der Lage sein sollte, die Standardimplementierung als No-Templat-Klasse zu verwenden ...
„* Gibt es einen Trick, das zu vermeiden? *“ Nein, es sei denn, Sie eine neue Art betrachten zu schaffen (mit einem anderen Namen), die öffentlich von ihr erbt und leitet alle Konstrukteure. – ildjarn
Oder benutzen Sie einfach eine typedef statt Vererbung: 'typedef myClass myClassDef;' –
@Remy: Oh ja, oder dass. :-P Ich glaube, mein Gehirn ist für den Tag getan. – ildjarn