Das folgende Programm kompiliert in Visual Studio 2008 unter Windows, beide mit Zeichensatz "Unicode-Zeichensatz verwenden" und "Multi-Byte-Zeichensatz verwenden". Es kompiliert jedoch nicht unter Ubuntu 10.04.2 LTS 64-bit und GCC 4.4.3. Ich benutze Boost 1.46.1 in beiden Umgebungen.
%Vor%Der Kompilierfehler unter Linux ist:
test.cpp: 6: Fehler: keine Übereinstimmung für 'operator & lt; & lt;' in 'std :: wcout & lt; & lt; p.boost :: filesystem3 :: pfad :: native () '
Es sieht so aus, als ob boost :: filesystem unter Linux in path :: native () keine breite Zeichenfolge liefert, obwohl boost :: filesystem :: path mit einer breiten Zeichenfolge initialisiert wurde. Außerdem vermute ich, dass Linux UTF-8 und Windows UTF-16 als Standard verwendet.
Also meine erste Frage ist, wie schreibe ich ein Programm, das boost :: filesystem und unterstützt Unicode-Pfade auf beiden Plattformen?
Zweite Frage: Wenn ich dieses Programm unter Windows ausführe, gibt es aus:
%Vor%Nach meinem Verständnis sollte die native () -Methode den Pfad unter Windows in das native Format konvertieren, wobei Backslashes anstelle von Schrägstrichen verwendet werden. Warum kommt die Zeichenfolge im POSIX-Format?
Ihr Verständnis von native
ist nicht vollständig korrekt:
Natives Pfadnamenformat: Ein Implementierungsdefiniertes Format. [Hinweis: Bei POSIX-ähnlichen Betriebssystemen entspricht das native Format dem generischen Format. Unter Windows ähnelt das systemeigene Format dem generischen Format, aber die Trennzeichen für Verzeichnisse können entweder Schrägstriche oder Backslashes sein. --Anmerkung]
von Referenz
Dies liegt daran, dass Windows Pfadnamen im POSIX-Stil zulässt, so dass die Verwendung von native()
keine Probleme mit den oben genannten verursacht.
Da Sie oft ähnliche Probleme mit Ihrer Ausgabe bekommen, denke ich, dass der beste Weg wäre, Ihren Präprozessor zu verwenden, d. h .:
%Vor%und etwas ähnliches für die String-Klasse.
Tags und Links windows linux unicode boost filesystems