gpt4 book ai didi

c++ - fprintf 如何格式化参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:52 25 4
gpt4 key购买 nike

我目前正在尝试将任意数量的 MyType 参数传递给 fprintf,如下所示:

void myPrint(const char* fmt, std::initializer_list<MyType> args)
{
fprintf(stdout, fmt, args);
}

其中 MyType 基本上是一个变体,可以从最常见的类型(int、string、uint*、bool 等)构造。现在像这样调用 myPrint(...)

myPrint("I am a hex int: %x", { 5 } );

这将始终打印initializer_list 的地址。在查看引用资料时,例如cplusplus.com , 它说

[...] If format includes format specifiers (subsequences beginning with %), the additional arguments following format are formatted and inserted in the resulting string replacing their respective specifiers. [...]

microsoft.com

[...] Each function argument (if any) is converted and output according to the corresponding format specification in format. [...]

所以,我的问题是:fprintf 如何格式化转换 它的参数?它使用运算符吗?它使用类型转换吗?

最佳答案

fprintf是从 C 继承的函数。特别是,它采用 C 可变参数:int fprintf(FILE*, const char*, ...) .

您只能将内置 C 类型传递给这样的函数,甚至不能传递用户定义的 C 类型。尝试这样做是未定义的行为。试图通过 MyType是危险的(例如 string 你提到的是不允许的)。通过 std::initializer_list<T>总是未定义的行为。

正如 Jarod 在评论中所说,使用 std::cout << .如果您需要更高级的格式,请使用 Boost.format .

关于c++ - fprintf 如何格式化参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46785413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com