Ich muss einen bereits zugewiesenen char * -Puffer (mit dem Inhalt der Zeichenfolge) in einem Std :: String-Objekt verwenden. Nach einigen Recherchen fand ich heraus, dass dies fast unmöglich ist und std :: string würde immer eine eigene Kopie von Daten haben. Der einzige verbleibende Weg, den ich mir vorstellen kann, ist, einen benutzerdefinierten Zuordner zu verwenden, der die Adresse des bereits zugewiesenen Zeichenpuffers zurückgibt. Damit das funktioniert, sollte std :: string nur den Allokator verwenden, um Speicher für seine String-Daten zu reservieren und sonst nichts. Ist das der Fall?Verwenden eines benutzerdefinierten Zuordners in Std :: string, um einen bereits zugewiesenen Zeichenpuffer zu verwenden
Antwort
std::string
ist ein typedef von basic_string
, das bereits ausdrücklich den Standardzuordner verwendet. Es gibt keine Möglichkeit für std::string
, einen anderen Zuordner zu verwenden. Selbst wenn Sie einen neuen Typdef von basic_string
mit dem gewünschten Zuordner erstellt haben, konnte er nicht an eine API übergeben werden, die std::string
erwartet.
Leider kann ich keine Möglichkeit sehen, alle Anforderungen zu erfüllen, die Sie in einem der aktuellen C++ - Standards festgelegt haben, es sei denn, Sie können eine oder mehrere Ihrer Anforderungen irgendwie lockern.
Eine mögliche kreative Lösung, wenn Sie in der Lage sind, dies zu tun, wäre Ihre „Orignal“ char*
Puffer als std::string
unter Verwendung resize
zuzuordnen. Dann könnten Sie swap
diese Zeichenfolge in Ihre neue, um es Besitz zu nehmen.
Ah, dachte .. Kein Glück mit diesem dann .. – user3612009
- 1. Verwenden eines benutzerdefinierten Zuordners in einem std :: scoped_allocator_adaptor mit Std :: unordered_map
- 2. Festlegen eines benutzerdefinierten Zuordners für Zeichenfolgen
- 3. Verwenden eines Analyzers in einer benutzerdefinierten FieldBridge
- 4. Verwenden von benutzerdefinierten std :: set Komparator
- 5. BookshelfJS: Verwenden eines benutzerdefinierten Feldnamens
- 6. Verwenden eines benutzerdefinierten WPF-Steuerelements in WinForms
- 7. Wie AsynchronousFileChannel verwenden, um einen String zu lesen effizient
- 8. Zeichenpuffer zwischen C# -String-Objekten teilen
- 9. Ist es möglich, std :: string in einem conexpr zu verwenden?
- 10. Verwenden eines zugewiesenen Speicherplatzes zum Speichern mehrerer Arrays
- 11. Verwenden eines benutzerdefinierten F # -Operators in C#?
- 12. Verwenden eines String-Arrays mit einem benutzerdefinierten Adapter zur Listenansicht?
- 13. Implementierung von istream für einen Zeichenpuffer?
- 14. Wie std :: string mit Asio verwenden :: Puffer()
- 15. TensorFlow: Verwenden eines Tensors, um einen anderen Tensor zu indizieren
- 16. Gibt es eine Perl-Funktion, um einen String in einen Regexp zu verwandeln, um diesen String als Muster zu verwenden?
- 17. std :: string mit einem benutzerdefinierten Zuweiser
- 18. Verwenden eines benutzerdefinierten Formats mit Bindungsquelle?
- 19. Verwenden Sie std :: experimental :: optional, um eine Liste zu implementieren
- 20. NHibernate: Verwenden eines benutzerdefinierten Typs als Primärschlüssel
- 21. Verwenden eines Formulars in einem benutzerdefinierten Controller?
- 22. Verwenden Sie next_permutation, um einen Vektor von Klassen zu permutatieren
- 23. AJAX verwenden, um einen Datenlogger zu erstellen
- 24. Verwenden eines Booleschen Arrays als benutzerdefinierten Wörterbuchschlüssel
- 25. Ist es möglich, eine std :: string für read() zu verwenden?
- 26. Rebinding in einem benutzerdefinierten STL Zuordner mit vorab zugewiesenen Block
- 27. Verwenden eines benutzerdefinierten buildpack für heroku imagemagick
- 28. Welche Bibliotheken brauche ich, um std :: Platzhalter zu verwenden?
- 29. Messen Sie einen String, ohne ein Graphics-Objekt zu verwenden?
- 30. Swig verwenden, um fließende Interfaces zu weben
Es gibt Vorschläge für 'string_view' oder' string_ref', die die Schnittstelle 'std :: string' anbieten, ohne den zugrunde liegenden Puffer zu besitzen. Es gibt auch Bibliotheken, die ihre eigenen Versionen einer solchen Klasse haben. Google diese Begriffe und Sie könnten etwas, das Ihren Bedürfnissen entspricht. – Praetorian
gute Info! Werde einen Blick darauf werfen. Aber für diesen speziellen Fall muss ich bei std :: string bleiben, da dies Teil einer API ist. Danke für die Information. – user3612009