Namensräume
Varianten
Aktionen

operator<<,>>(std::filesystem::path)

Von cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
template< class CharT, class Traits >

friend std::basic_ostream<CharT,Traits>&

    operator<<( std::basic_ostream<CharT,Traits>& os, const path& p );
(1) (seit C++17)
template< class CharT, class Traits >

friend std::basic_istream<CharT,Traits>&

    operator>>( std::basic_istream<CharT,Traits>& is, path& p );
(2) (seit C++17)

Führt Stream-Ein- oder -Ausgabe für den Pfad p durch. std::quoted wird verwendet, damit Leerzeichen bei späterem Lesen durch den Stream-Input-Operator keine Abschneidung verursachen.

Diese Funktionsvorlagen sind für normale nicht qualifizierte oder qualifizierte Suchen nicht sichtbar und können nur durch argumentabhängige Suche gefunden werden, wenn std::filesystem::path eine zugeordnete Klasse der Argumente ist. Dies verhindert unerwünschte Konvertierungen bei Vorhandensein einer using-directive wie using namespace std::filesystem;.

Inhalt

[bearbeiten] Parameter

os - Stream, auf dem die Ausgabe erfolgen soll
ist - Stream, aus dem die Eingabe erfolgen soll
p - Pfad, der eingefügt oder extrahiert werden soll

[bearbeiten] Rückgabewert

1) os
2) is

[edit] Exceptions

Kann implementierungsdefinierte Ausnahmen auslösen.

[bearbeiten] Mögliche Implementierung

operator<<
template<class CharT, class Traits>
friend std::basic_ostream<CharT,Traits>&
    operator<<(std::basic_ostream<CharT,Traits>& os, const path& p)
{
    os << std::quoted(p.string<CharT,Traits>());
    return os;
}
operator>>
template<class CharT, class Traits>
friend std::basic_istream<CharT,Traits>&
    operator>>(std::basic_istream<CharT,Traits>& is, path& p)
{
    std::basic_string<CharT, Traits> t;
    is >> std::quoted(t);
    p = t;
    return is;
}

[bearbeiten] Beispiel

#include <filesystem>
#include <iostream>
 
int main()
{
    std::cout << std::filesystem::current_path() << '\n';
    std::cout << std::filesystem::temp_directory_path() << '\n';
}

Mögliche Ausgabe

"/home/user"
"/tmp"

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2989 C++17 erlaubte Einfügung von allem, was in Anwesenheit einer using-directive in path konvertierbar ist versteckte Freundfunktion gemacht