Spec-Zone.ru › C++

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

template< class CharT, class Traits >
friend std::basic_ostream<CharT,Traits>&
    operator<<( std::basic_ostream<CharT,Traits>& os, const path& p );
(1) (начиная с C++17)
template< class CharT, class Traits >
friend std::basic_istream<CharT,Traits>&
    operator>>( std::basic_istream<CharT,Traits>& is, path& p );
(2) (начиная с C++17)

Выполняет потоковый ввод или вывод для пути p. std::quoted используется, чтобы пробелы не приводили к усечению данных при последующем чтении оператором потокового ввода.

Эти шаблоны функций недоступны для обычного неквалифицированного или квалифицированного поиска и могут быть найдены только с помощью поиска, зависящего от аргументов, когда std::filesystem::path является ассоциированным классом аргументов. Это предотвращает нежелательные преобразования при наличии using namespace std::filesystem; директивы using.

Параметры

os - поток, в который выполняется вывод
is - поток, из которого выполняется ввод
p - путь для вставки или извлечения

Возвращаемое значение

1) os
2) is

Исключения

Могут быть выброшены исключения, определяемые реализацией.

Возможная реализация

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;
}

Пример

#include <filesystem>
#include <iostream>

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

Возможный вывод:

"/home/user"
"/tmp"

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 2989 C++17 разрешалась вставка всего, что преобразуется в path, при наличии директивы using функция была сделана скрытой дружественной функцией

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/path/operator_ltltgtgt

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API