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

履歴 編集

function template
<filesystem>

std::filesystem::u8path(C++17)(C++20で非推奨)

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

処理系