std::format() 是否接受不同的格式和参数字符串类型?
Does std::format() accept different string types for format and arguments?
使用 printf
我可以做类似 this
的事情
wprintf(L"%hs", "abc");
其中 format
是 wchar_t * 但参数是 char *。这对 std::format()
可行吗?还是我必须先将一个转换为另一个?
当我做的时候
std::format(L"{:hs}", "abc");
我收到有关类型不匹配的编译错误。
不能。
根据 the documentation, the format string matches Python’s format specification,它没有任何直接处理不同字符串类型或编码的魔力。 (Python 使用 CESU-8、IIRC 在幕后完成所有工作。)
这是我希望 C++ 标准做正确事情™ 的事情之一,但由于 C++ 标准委员会仍未确定他们希望如何处理字符串编码转换(截至 2022 年 1 月) ) 我们陷入了一个愚蠢的 std::format
.
我认为(并希望)最终目标是 std::format
有一天会接受不同的字符串类型并为您正确转换它们,而无需更改 fmt
参数。但是现在,您必须 .
唉,ATM std::format
将只接受类似字符串类型的所有参数,其中基本字符类型是 char
或 wchar_t
。而已。 (More docs.)
使用 printf
我可以做类似 this
wprintf(L"%hs", "abc");
其中 format
是 wchar_t * 但参数是 char *。这对 std::format()
可行吗?还是我必须先将一个转换为另一个?
当我做的时候
std::format(L"{:hs}", "abc");
我收到有关类型不匹配的编译错误。
不能。
根据 the documentation, the format string matches Python’s format specification,它没有任何直接处理不同字符串类型或编码的魔力。 (Python 使用 CESU-8、IIRC 在幕后完成所有工作。)
这是我希望 C++ 标准做正确事情™ 的事情之一,但由于 C++ 标准委员会仍未确定他们希望如何处理字符串编码转换(截至 2022 年 1 月) ) 我们陷入了一个愚蠢的 std::format
.
我认为(并希望)最终目标是 std::format
有一天会接受不同的字符串类型并为您正确转换它们,而无需更改 fmt
参数。但是现在,您必须
唉,ATM std::format
将只接受类似字符串类型的所有参数,其中基本字符类型是 char
或 wchar_t
。而已。 (More docs.)