c++ - std::format() 是否接受不同的字符串类型作为格式和参数?

标签 c++ printf

使用 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 只接受所有参数的类似字符串类型,其中基本字符类型为 charwchar_t。就是这样。 ( More docs .)

关于c++ - std::format() 是否接受不同的字符串类型作为格式和参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70765272/

相关文章:

C++仿函数,一种有效的方法?

c++ - 为什么我必须在 "original"指针上调用 delete?

c++ - EscapeXML C++ Visual Studio

c++ - printf 和多个字符串的不良行为

c++ - 是否可以完全禁用默认的 C++ new 运算符?

c - 打印前执行的扫描语句

c - Printf 没有显示第一个,只显示后面的

c - 避免在printf()中尾随零

PHP sprintf 与 echo

c++ - OpenCV 重新映射裁剪我的风景图像