• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <filesystem>

    std::filesystem::u8path

    namespace std::filesystem {
      template <class Source>
      path u8path(const Source& source);                    // (1)
    
      template <class InputIterator>
      path u8path(InputIterator first, InputIterator last); // (2)
    }
    

    この関数は、C++20で非推奨となった。UTF-8エンコードされたパス文字列はchar8_t型文字列としてpathクラスのコンストラクタに、指定すること。

    概要

    UTF-8エンコードされた文字列からパスオブジェクトを構築する。

    • (1) : UTF-8エンコードされたchar(C++20以降はchar8_tも)配列、std::stringstd::string_viewオブジェクトからパスオブジェクトを構築する
    • (2) : UTF-8エンコードされたchar(C++20以降はchar8_tも)要素の範囲から、パスオブジェクトを構築する

    要件

    • sourceおよび文字範囲[first, last)がUTF-8エンコードされていること
    • 文字列の要素となる文字型がcharであること

    効果

    • pathクラスのvalue_typecharであれば (POSIX)、文字コード変換せずにpathオブジェクトを構築して返す
    • そうでなければ、OSのファイルシステムが扱う文字コードに変換し (WindowsならUTF-16)、pathオブジェクトを構築して返す

    非推奨の詳細 (C++20)

    C++20ではUTF-8エンコードされた文字にはchar8_tが型付けられ、char型とオーバーロードできるようになった。pathクラスのコンストラクタchar8_t版のオーバーロードが追加されたため、この関数は不要になった。

    #include <fstream>
    #include <filesystem>
    
    namespace fs = std::filesystem;
    
    int main()
    {
      // (1)
      {
        fs::path p = fs::u8path(u8"a/b/c");
        std::ofstream file{p};
      }
    
      // (2)
      {
        std::string raw_path = u8"a/b/c";
        fs::path p = fs::u8path(raw_path.begin(), raw_path.end());
        std::ofstream file{p};
      }
    }
    

    出力

    バージョン

    言語

    • C++17

    処理系