2016-03-27 7 views
2

Klasse Vorlage für Karte ist wie diesKönnen wir eine Klassenvorlage mit weniger Parametern als in der Vorlage deklarieren?

template < class Key,          // map::key_type 
     class T,          // map::mapped_type 
     class Compare = less<Key>,      // map::key_compare 
     class Alloc = allocator<pair<const Key,T> > // map::allocator_type 
     > class map; 

aus der Vorlage 4 Template-Parameter zu nehmen scheint es aber, während eine Karte zu erklären, ich sehe nur zwei Template-Parameter.

map <int, int> table; 

Ist das kein Problem? Wenn es nicht richtig ist, nur den Typ der letzten zwei (der vier) zu definieren?

map<,,int,int> 

Antwort

7
  1. Ist das kein Problem?

Dies ist kein Problem, es ist default template arguments.

Standardschablonenargumente werden in den Parameterlisten nach dem Zeichen = angegeben.

Wenn Sie sie nicht angeben, z. B. map<key_type, value_type>, werden stattdessen die Standardargumente verwendet. d.h. Compare wird less<key_type> sein, und Alloc wird allocator<pair<const key_type, value_type>> sein.

  1. ist das korrekt, um nur den Typ der letzten zwei (der vier) zu definieren? Karte < ,, int, int>

Nr Standardargumente werden anstelle der fehlenden Hinter Argumente verwendet. Sie können nicht nur die letzten beiden Argumente angeben, ohne die ersten beiden anzugeben, und möchten, dass die Standardargumente angewendet werden. Und in diesem Fall haben die ersten beiden Parameter kein Standardargument.

BTW

Wenn der Standard für eine Template-Parameter eines primären Klassenvorlage angegeben wird, muss jede nachfolgende Template-Parameter ein Standardargument, mit Ausnahme der allerletzten kann ein Template-Parameter Packung sein.

5

Ist das nicht ein Problem?

Nein, das ist, was die Standardtypdefinitionen sind für: = less<Key> und = allocator<pair<const Key,T> >. Wie Sie sehen können, können diese Typen von Key und T abgeleitet werden.

Wenn nicht ist es richtig, nur den Typ der letzten zwei (der vier) zu definieren? map<,,int,int>

Nein, das kann nicht getan werden.

2

Dies ist der Standardparameter für die Vorlage.

Aber nur eine oder mehrere am Ende könnte die Standard-Parameter (dh sobald ein Standard-Parameter vorhanden ist, alle Parameter nach diesem Parameter muss der Standard-Parameter sein.)

so, Ihr Code wie folgt aus:

map<,,int,int>

falsch.

der richtige Code wie folgt aus:

map<int,int>;

Anmerkung: Sie beziehen Thinking.In.C++ ,. Second.Edition.Volume.2

Verwandte Themen