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 将只接受类似字符串类型的所有参数,其中基本字符类型是 charwchar_t。而已。 (More docs.)