Wie benutze ich basic_ostringstream mit Stateful Custom Allocator? (C ++ 11)

9

Laut cppreference kann std :: basic_ostringstream instanziiert werden ein benutzerdefinierter Zuordner Seit C ++ 11 dürfen Zuweiser einen Zustand haben und meine benutzerdefinierte Zuweisungsklasse hat einen internen Status pro Instanz (tatsächlich hat jede Zuweisungsinstanz einen Zeiger auf eine Instanz einer Klasse MemPool , zu der sie gehört leitet alle Zuordnungsanforderungen weiter). Das ist der Grund, warum mein Zuordnertyp nicht einfach nur default-constructed sein kann und erwartet wird, dass er funktioniert, denn wo wird er schließlich die Adresse der MemPool Instanz bekommen, von der er verwendet werden soll?

Wenn Sie sich leider die Konstruktor-Prototypen von ansehen: : basic_ostringstream , Sie können sehen, dass keiner der unterstützten Konstruktoren tatsächlich eine Zuweisungsinstanz verwendet! Ich bin mir ziemlich sicher, dass std :: basic_ostringstream einige Zuordnungen vornehmen muss, um die resultierende Zeichenfolge zu erstellen, und ich möchte wirklich, dass sie meinen Zuweiser für diese verwendet, aber wie wird es gehen tue das, wenn ich keine Möglichkeit habe zu sagen, welche spezifische MemPool Instanz zu verwenden ist?

Habe ich hier etwas übersehen? Ich fühle mich wie ich muss, aber ich sehe es im Moment nicht.

    
antred 30.05.2014, 13:30
quelle

2 Antworten

2

Es ist möglich, dass die Auflösung der LWG-Fehler # 2210 , die Zuweisungsinstanzen den Konstruktoren vieler Standardbibliotheksbehälter hinzugefügt hatte, war nicht gründlich genug und die Ströme wurden übersehen. Oder vielleicht war es nicht klar genug, wie sie sich ihnen nähern sollten. Ich würde vorschlagen, einen neuen Fehlerbericht für die Bibliothek einzureichen (oder vielleicht zuerst in std-discussion )

    
Cubbi 31.05.2014, 14:01
quelle
1

Sie können ein basic_string<C, T, A> -Objekt an den Konstruktor übergeben, und ich erwarte, dass alle Implementierungen den Zuordner aus diesem String-Objekt kopieren werden (wahrscheinlich über einen Aufruf von allocator_traits<A>::select_on_container_copy_construction() ), aber das ist vom Standard nicht eindeutig festgelegt wahrscheinlich sollte.

    
Jonathan Wakely 07.10.2014 09:17
quelle

Tags und Links