2012-03-29 4 views
4

Ich benutze die Boost-Bibliothek, um meine Anwendung zu implementieren. Alle Zeichenfolgezeichen im Datenmodell meiner Anwendung sind breite Zeichen (wchar_t type). In der Boost-Bibliothek übergeben jedoch einige Klassen nur das schmale Zeichen (Zeichenart), d. H. "address boost::asio::ip::address::from_string(const char* str)". Also muss ich die Umwandlung zwischen std :: string und std :: wstring vornehmen, wenn die Boost-Funktionen aufgerufen werden.W String String Konverter in Boost

  1. Gibt es Leistungsproblem aufgrund der Zeichenfolgekonvertierungen?
  2. In dort der Konverter in Boost, der die Konvertierung zwischen Std :: Wstring und Std :: String mit guter Leistung macht?

UPDATE

In Bezug auf die Wandlerfunktion. Ich finde den Code unten funktioniert.

std::wstring wstr(L"Hello World"); 
const std::string nstr(wstr.begin(), wstr.end()); 
const std::wstring wstr2(nstr.begin(), nstr.end()); 
+3

Hoffentlich haben Sie keine Nicht-ASCII-Zeichen in Ihren breiten Strings ... – Eugene

Antwort

3

Fügen Sie die Forschungsschlussfolgerung selbst hinzu.

In Bezug auf den Leistungsaufwand der Zeichenfolge-Konvertierung. Ich debuggte in die oben genannten Funktionen. Die Konvertierung wird mit dem C-Cast Char von Char durchgeführt. Die Zeitkomplexität ist O (L), L ist die Länge der Zeichenkette. In meiner Anwendung sind die Zeichenfolgen, die konvertiert werden müssen, nicht sehr lang. Ich denke also nicht, dass es aufgrund der Conversions offensichtlich Leistungseinbußen gibt.