Skip to content

Latest commit

 

History

History
80 lines (61 loc) · 2.59 KB

u8path.md

File metadata and controls

80 lines (61 loc) · 2.59 KB

u8path

  • filesystem[meta header]
  • std::filesystem[meta namespace]
  • function template[meta id-type]
  • cpp17[meta cpp]
  • cpp20deprecated[meta cpp]
namespace std::filesystem {
  template <class Source>
  path u8path(const Source& source);                    // (1)

  template <class InputIterator>
  path u8path(InputIterator first, InputIterator last); // (2)
}
  • path[link path.md]

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

概要

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

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

要件

  • 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};
  }
}
  • fs::u8path[color ff0000]
  • raw_path.begin()[link /reference/string/basic_string/begin.md]
  • raw_path.end()[link /reference/string/basic_string/end.md]

出力

バージョン

言語

  • C++17

処理系