是否可以创建一个包装函数,我可以传递fprintf
的最后两个参数,例如_Format
和...
,它会执行以下操作:
void Log::green(_Format, ...[args])
{
// Set to green
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
// Print
fprintf(stdout, _Format, args);
// Set back to default color
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
}
答案 0 :(得分:3)
是的,但您必须使用vfprintf
版printf
并使用args
/ va_start
初始化va_end
,如下所示:
void Log::green(const char * format, ...)
{
va_list args;
va_start (args, format);
// Set to green
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
// Print
vfprintf(stdout, format, args);
// Set back to default color
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
va_end (args);
}
答案 1 :(得分:2)
首先,由于您使用的是C ++,因此您应该使用cout
而不是fprintf(stdout, ...)
。
其次,你可以使用这样的函数:
inline std::ostream& green(std::ostream &s)
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdout,
FOREGROUND_GREEN|FOREGROUND_INTENSITY);
return s;
}
允许你编写这样的代码:
cout << "Switching to green color... " << green << "Now, I'm green!"
您可以在此处找到完整的函数库:Add color to your std::cout