Aus dieser Antwort habe ich gelernt, dass wir in C++17 std::fstream mit einem UTF-8-Pfad über std::filesystem::u8path öffnen können. Aber in C++20 ist diese Funktion veraltet und wir sollten stattdessen const char8_t* an den Konstruktor std::filesystem::path übergeben.
Hier kommt das Problem: Obwohl wir (über reinterpret_cast) jeden Zeiger legal auf const char* konvertieren können, können wir dies nicht rückwärts tun: von const char* nach z.B. const char8_t* (es würde gegen strenge Aliasing-Regeln verstoßen). Wenn wir also über eine externe API verfügen, die eine char-basierte UTF-8-Darstellung des Dateinamens zurückgibt (z. B. aus einer in C geschriebenen Bibliothek), können wir den Zeiger nicht sicher in eine char8_t-basierte Darstellung konvertieren .
Wie sollen wir also eine solche char-basierte Ansicht von UTF-8-Strings in eine char8_t-basierte Ansicht davon konvertieren?
Aus dieser Antwort habe ich gelernt, dass wir in C++17 std::fstream mit einem UTF-8-Pfad über std::filesystem::u8path öffnen können. Aber in C++20 ist diese Funktion veraltet und wir sollten stattdessen const char8_t* an den Konstruktor std::filesystem::path übergeben.
Hier kommt das Problem: Obwohl wir (über reinterpret_cast) jeden Zeiger legal auf const char* konvertieren können, können wir dies nicht rückwärts tun: von const char* nach z.B. const char8_t* (es würde gegen strenge Aliasing-Regeln verstoßen). Wenn wir also über eine externe API verfügen, die eine char-basierte UTF-8-Darstellung des Dateinamens zurückgibt (z. B. aus einer in C geschriebenen Bibliothek), können wir den Zeiger nicht sicher in eine char8_t-basierte Darstellung konvertieren .
Wie sollen wir also eine solche char-basierte Ansicht von UTF-8-Strings in eine char8_t-basierte Ansicht davon konvertieren?
Ich möchte durch eine Zeichenfolge von Zeichen schauen und jeden herausziehen und jeder muss vom Typ const char* sein, damit ich sie an eine Funktion weitergeben kann. Hier ist ein Beispiel.
string...
Ich untersuche das Argumentabzug der Klassenvorlagen (CTAD) für ein Aggregat mit einem Array -Element, wenn er aus einem String -Literal initialisiert wurde.
#include
#include
Hier ist ein kleines Stück Code:
class myClass {
public:
void myMethod() const {
for (const auto& entity : myList) {
auto iter = myMap.find(&entity);
}
}