2012-04-05 13 views
3

Ich suchte für eine Implementierung von std :: map Laufzeit Bestellung und haben diese Lösung gefunden: STL std::map dynamic orderingSeltsam Verwendung von std :: map Konstruktor

Es ist für mich klar, aber ich verstehe nicht, es wie kann OrderingType im Konstruktor von std :: map verwendet werden. std :: map hat einen Konstruktor, der ein Komparator-Objekt als Argument erhält. Also es normal aus meiner Sicht ist der Code wie folgt zu verwenden:

int main() 
{ 
    Ordering<int> test_ordering(ASCENDING); 
    CUSTOMMAP map1(test_ordering); 

    return 0; 
} 

Aber Code von oben erwähnten Thema erstellt auch:

int main() 
{ 
    CUSTOMMAP map1(ASCENDING); 
    //... 
    return 0; 
} 

Ich verstehe nicht, warum es funktioniert: Konstruktor std :: map darf nicht das Argument der OrderingType-Enumeration statt des Ordering-Klassenobjekts selbst erhalten.

+0

Ich sehe keine 'std :: map' irgendwo in diesem Bild. –

+0

Ich habe gerade einen Block Code aus dem oben genannten Thema genommen. Vielleicht hätte ich es ganz zitieren sollen. Ich weiß nicht, ob es besser ist, nur einen Link zu verlassen. –

+0

Okay, ich sehe es jetzt. –

Antwort

9

Wenn der Konstruktor auf Ordering<int> die Ihre Aufzählung nimmt nicht als explicit deklariert, dann wird es ein „Konvertierungskonstruktor“ betrachtet, die automatisch eingefügt werden kann, wenn der Compiler einen Bedarf von Ihrem Aufzählungstyp zum Ordering<int> Typ zu konvertieren hat . So wird der Compiler nimmt effektiv diese:

CUSTOMMAP map1(ASCENDING); 

und in diese Transformation:

CUSTOMMAP map1(Ordering<int>(ASCENDING)); 

Dies entspricht einer implizite Konvertierung genannt wird.

+0

Vielen Dank für Ihre Antwort. –