Ich habe eine Klassenvorlage ähnlich der folgenden, die einige Konfigurationseinstellungen enthält, die beim Analysieren von CSV-Dateien verwendet werden:
%Vor%Nun ist der Template-Parameter wichtig, wenn der Benutzer Start- und Ende-Iteratoren zu einer Datenstruktur liefern will, die die Nummern der Spalten enthält, die analysiert werden sollen; Sollte der Benutzer die Iteratoren jedoch nicht als Parameter bereitstellen, sollte die Klasse automatisch davon ausgehen, dass alle Spalten analysiert werden sollen.
Im zweiten Fall sieht der Code zum Deklarieren einer Instanz der Klasse unhandlich aus:
%Vor% Außerdem werden die Bitmaskentypen noqt
, quot
und mmap
nur von dieser Klasse verwendet, daher ist es sinnvoll, sie in die Klassendefinition einzufügen; Sollte der Benutzer jedoch diese Bitmaskentypen verwenden wollen, ist der entsprechende Code ebenfalls unhandlich:
Wie kann ich sicherstellen, dass der Benutzer keine spitzen Klammern angeben muss, um das Fehlen eines Vorlagenparameters anzuzeigen? Wenn es keinen Weg dazu gibt, welche Alternative würden Sie vorschlagen?
Leider ist das C ++ Syntax. IIRC, in C ++ 0x gibt es assoziierte Namespaces (die Ihre zweite Frage lösen).
Für die erste sollte ein typedef tun, à la STL:
%Vor% Normalerweise ist der Iteratortyp für Iteratorparameter ein Vorlagenparameter für nur die Funktionen, die sie benötigen. Wenn Sie sich beispielsweise den Konstruktor std::vector
ansehen, wird er mit den Iteratoren begin () und end () templatiert, aber nicht mit dem ganzen Typ.
Tags und Links c++ design-patterns templates