Ich versuche, einen einfachen Speicherpoolzuordner mit std::unordered_map
zu verwenden. Ich habe den gleichen Allokator scheinbar erfolgreich mit std::string
und std::vector
verwendet. Ich möchte, dass die Elemente, die in der unordered_map (und dem Vektor) enthalten sind, auch diesen Zuordner verwenden, also habe ich meinen Zuordner in std::scoped_allocator_adaptor
eingepackt.
Vereinfachter Definitionssatz:
%Vor%Initialisiert als solches:
%Vor% lake_alloc
wird unten mit dem Rest des Iteratorcodes angezeigt. Der Fehler, den ich in Clang 3.3 bekomme, ist, dass es nicht allocator_type
(in diesem Fall das mm_alloc des Paares von String zu Vektor) zu seinem eigenen __pointer_allocator
kann. Dies ist ein interner Typ, der für die Hash-Map-Implementierung verwendet wird. Teilfehlerausgabe unten:
GCC 4.7.1 gibt mir einen ähnlichen Fehler in seinen Hash-Map-internen Strukturen so klar, ich mache es falsch, aber dies ist mein erster Ausflug in Allokatoren in der STL und ich bin ratlos.
Der benutzerdefinierte Zuordner folgt: Es ist eine einfache Implementierung mit einigen Lücken, aber diese Version funktioniert gut in einem Testfall mit einigen Mega Daten in Vektoren und Strings.
%Vor%Ich glaube, der Grundfehler ist, dass krystal_alloc ein "Converting Constructor" fehlt:
%Vor%Ich bin mir nicht sicher, ob ich es richtig umgesetzt habe, das ist nur meine beste Schätzung. Sie benötigen eine Friend-Anweisung, damit dies funktioniert:
%Vor%Ich empfehle auch, dass Sie "const" zum key_type in Ihren Zuweisungen für unordered_map hinzufügen:
%Vor% Und ich denke , dass Sie lake_alloc
anstelle von mm_alloc
auf Ihren inneren Containern verwenden können. Ihr Beispiel kompiliert für mich beide Wege. Ich habe es nicht auf Laufzeitverhalten getestet.