我目前正在尝试像这样将任意数量的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,它说或microsoft.com
所以,我的问题是:
fprintf
如何格式化或转换其参数?是否使用运算符?它使用 Actor 表吗? 最佳答案
fprintf
是从C继承的函数。尤其是,它采用C可变参数:int fprintf(FILE*, const char*, ...)
。
您只能将内置C类型传递给此类函数,甚至不能将用户定义的C类型传递给该函数。尝试这样做的是未定义行为。尝试传递MyType
很危险(例如,您提到的string
不允许使用)。传递std::initializer_list<T>
始终是未定义行为。
如Jarod在评论中所述,请使用std::cout <<
。如果需要更高级的格式,请使用Boost.format
。