使用 printf
我可以做类似 this 的事情
wprintf(L"%hs", "abc");
其中格式
是wchar_t *,但参数是char *。这可以通过 std::format()
实现吗?还是我必须先将其中一个转换为另一个?
当我这样做的时候
std::format(L"{:hs}", "abc");
我收到有关类型不匹配的编译错误。
最佳答案
不能。
根据the documentation ,格式字符串匹配 Python’s format specification ,它对于直接处理不同的字符串类型或编码没有任何魔力。 (Python 使用 CESU-8、IIRC 在幕后完成所有工作。)
这是我希望 C++ 标准能够做正确的事情™ 的事情之一,但由于 C++ 标准委员会仍然没有讨论出他们想要如何处理字符串编码转换(截至 2022 年 1 月),我们被愚蠢的 std::format
困住了。
我认为(并且希望)最终目标是 std::format
有一天会接受不同的字符串类型并为您正确转换它们,而无需更改 fmt
参数。但是现在,您必须perform the transform yourself .
唉,ATM std::format
只接受所有参数的类似字符串类型,其中基本字符类型为 char
或 wchar_t
。就是这样。 ( More docs .)
关于c++ - std::format() 是否接受不同的字符串类型作为格式和参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70765272/