Ich versuche, das Curiously Recurring Template Pattern (CRTP) zu verwenden und zusätzliche Typparameter zur Verfügung zu stellen:
%Vor% Dies ist wahrscheinlich ein Fehler, die geeignetere Oberklasse wäre Base<A, double, int>
- obwohl diese Nichtübereinstimmung der Argumentreihenfolge nicht so offensichtlich ist. Dieser Fehler wäre einfacher zu sehen, wenn ich die Bedeutung der Parameter in einem typedef mit name bezeichnen könnte:
Allerdings kompiliert dies nicht auf gcc 4.4, die gemeldeten Fehler werden als Kommentare oben gegeben - ich denke der Grund ist, dass vor dem Erstellen von A, es die Basis-Vorlage instanziieren muss, aber das wiederum müsste A wissen .
Gibt es eine gute Möglichkeit, "benannte" Template-Parameter während der Verwendung von CRTP zu übergeben?
@ James Antwort ist offensichtlich richtig, aber Sie könnten immer noch einige Probleme haben, wenn der Benutzer nicht korrekte typedefs bietet.
Es ist möglich zu "behaupten", dass die verwendeten Typen richtig sind, indem Sie die Kompilierzeit-Prüfmöglichkeiten verwenden. Abhängig von der Version von C ++, die Sie verwenden, können Sie Boost verwenden.
In C ++ 0x geschieht dies durch Kombination von:
static_assert
: eine neue Möglichkeit zur Überprüfung der Kompilierzeit, mit der Sie eine Nachricht type_traits
, die einige Vergleichselemente wie std::is_integral
oder std::is_floating_point
enthält
Beispiel:
%Vor%Dies ist den typischen defensiven Programmier Idiomen in der Laufzeitumgebung sehr ähnlich.
Tags und Links c++ templates named-parameters crtp