namespace std {
template <class charT>
struct formatter<filesystem::path, charT>;
}
概要
filesystem::path
クラスに対するstd::formatter
クラステンプレートの特殊化。
書式としては、以下を使用できる:
[[fill] align] [width] [?] [g]
fill
: アライメントに使う文字 (デフォルト: スペース)align
: アライメント(デフォルトは型による)>
: 右寄せ<
: 左寄せ^
: 中央寄せ
width
: 幅 (アライメントもしくは0埋めの幅)- 置換フィールドを使って変数で指定できる
?
: デバッグ出力- 文字・文字列を引用符で囲み、エスケープシーケンスをエスケープして出力
g
: 環境非依存のパスフォーマット (generic_string()
) を使用する- これが指定されない場合は、プラットフォームごとのパスフォーマット (
native()
) を使用する
- これが指定されない場合は、プラットフォームごとのパスフォーマット (
例
#include <print>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
fs::path a = "/a/b/c.txt";
fs::path b = "multi\nline";
fs::path c = "a\\b\\c.txt";
// デフォルトフォーマットは、operator<<とちがって
// 引用符で囲まずに出力する
std::println("1 : {}", a);
// デバッグ出力。
// 引用符で囲み、エスケープシーケンスをエスケープして出力する
std::println("2 : {:?}", a);
std::println("3 : {:?}", b);
// 環境非依存のパスフォーマット
std::println("4 : {:g}", c);
std::println("5 : {}", c);
}
24
#include <print>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
fs::path a = "/a/b/c.txt";
fs::path b = "multi\nline";
fs::path c = "a\\b\\c.txt";
// デフォルトフォーマットは、operator<<とちがって
// 引用符で囲まずに出力する
std::println("1 : {}", a);
// デバッグ出力。
// 引用符で囲み、エスケープシーケンスをエスケープして出力する
std::println("2 : {:?}", a);
std::println("3 : {:?}", b);
出力例
1. /a/b/c.txt
2. "/a/b/c.txt"
3. "multi\nline"
4. a/b/c.txt
5. a\b\c.txt
バージョン
言語
- C++26
処理系
- Clang: 20.0 ❌
- GCC: 14 ❌
- Visual C++: 2022 Update 10 ❌
関連項目
std::format()
(フォーマットの詳細)