[英]'fprintf' Color Format Wrapper
是否可以做一個包裝器函數,讓我可以傳遞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);
}
是的,但是您必須使用vfprintf
版本的printf
並使用va_start
/ va_end
初始化args
如下所示:
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);
}
首先,由於您使用的是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!"
您可以在這里找到完整的函數庫: 向std :: cout添加顏色
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.