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::string
、std::string_view
オブジェクトからパスオブジェクトを構築する - (2) : UTF-8エンコードされた
char
(C++20以降はchar8_t
も)要素の範囲から、パスオブジェクトを構築する
要件
source
および文字範囲[first, last)
がUTF-8エンコードされていること- 文字列の要素となる文字型が
char
であること
効果
path
クラスのvalue_type
がchar
であれば (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
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅