Reduzierung der Template-Komplexität in C ++

8

Vor kurzem habe ich eine der weniger verwendeten STL-Funktionen - benutzerdefinierte Zuordner - verwendet, und ich brauche einige ernsthafte Hilfe, um meinen semantischen Overhead zu reduzieren. Nehmen Sie zum Beispiel die Definition einer ungeordneten Map, die Dateinamen einer ungeordneten Map eines Paares von Ints und einem shared_ptr einem Token zuordnet, aber einen benutzerdefinierten Zuordner verwendet.

%Vor%

Das sind 404 Zeichen von Definitionen. Und dann, um es zu konstruieren, muss ich die Voreinstellung für jedes Template - Argument übergeben, außer dem Allocator, der nicht standardmäßig erstellt werden kann, UND der Bucket - Anzahl, für die keine Definition existiert, was zu weiteren 168 Zeichen führt, nur um das zu konstruieren verdammtes Ding. Und natürlich, jedes Mal, wenn ich einfügen möchte, das Gleiche, weil der Wertetyp der ersten Karte auch so aufgebaut sein muss.

Gibt es eine Möglichkeit, all das zu vermeiden, ohne meine eigene unordered_map schreiben zu müssen? Es beginnt ernsthaft, meine Produktivität zu verlangsamen.

Bearbeiten: Entschuldigung! Im Allgemeinen bedeutete ich für STL-Container, nicht nur unordered_map speziell, es ist nur der schlimmste Fall. Ich habe auch dieses Problem mit regulärer Karte, unordered_set, usw., und kann nicht eine Funktion schreiben, um all dies für alle möglichen STL-Container zu tun, die ich möglicherweise benötigen könnte.

    
Puppy 04.12.2010, 14:35
quelle

2 Antworten

6

icecrime's Lösung kann auch mit etwas weniger Hässlichkeit auf älteren Compilern über den unten stehenden Code durchgeführt werden. Sie können möglicherweise auch Factory-Funktionen hinzufügen, um die Konstruktion zu vereinfachen.

%Vor%     
Dark Falcon 04.12.2010, 14:49
quelle
6

Leider kann ich kein vollständiges und kompilierbares Codebeispiel bereitstellen, da ich hier keinen C ++ 0x-Compiler habe. Ich glaube jedoch, dass C ++ 0x Vorlagenalias hier hilfreich sein könnte:

%Vor%

Noch einmal, tut mir leid, wenn das nicht kompiliert.

Beachten Sie auch, dass dies bereits in C ++ 03 mit einem zusätzlichen Typ 'indirect' möglich war:

%Vor%     
icecrime 04.12.2010 14:44
quelle

Tags und Links