Vermeiden von Klammern für Klassenvorlagen mit Standardparametern

9

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:

%Vor%

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?

    
void-pointer 25.07.2011, 06:20
quelle

3 Antworten

4

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%     
Alexandre C. 25.07.2011, 06:26
quelle
0

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.

    
Puppy 25.07.2011 06:25
quelle
0

Ich denke, Winkelstreben sind in der Tat ein besserer Weg. Da können sie nicht ingoniert werden, Alternativer Weg kann sein,

%Vor%     
iammilind 25.07.2011 06:26
quelle

Tags und Links