c++ - 'fprintf' 颜色格式包装器

标签 c++ colors formatting wrapper printf

是否可以制作一个包装函数,我可以在其中传递 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 的版本并初始化 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);    
}

关于c++ - 'fprintf' 颜色格式包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019226/

相关文章:

c++ - ENABLE_VIRTUAL_TERMINAL_PROCESSING 和 DISABLE_NEWLINE_AUTO_RETURN 失败

用于列出所有可能的模板实现的 C++ 解决方法

android - 更改 android 操作栏的背景颜色,基本教程

.net - 字符串格式表达式,仅当有小数时才显示 2 位小数的货币 (.net)

HTML 到 'pretty' 文本转换,用于在纯文本打印机(点阵)上打印

java - 如何在 Android 上制作无限符号?

c++ - 如何开始使用 Android Studio C++ 开发

c++ - 您将如何对内存分配器进行单元测试?

Android 图形 XML 中的颜色

c++ - 你可以使用带有 vt100 转义码的十六进制颜色值 c++