c++ - 制作一个像流一样的 C++ 宏

标签 c++ c macros g++

在没有 Google 帮助的情况下,我想知道是否有人可以告诉我是否可以创建一个 C++ (g++) 调试宏,其行为类似于“改进的”std::cout。想法是通过 << 接受参数并附加一些文本,以便

DBG << "Hello" << world;

可能产生

myfile.cpp 1420 Hello world

我知道有一些日志库(?)/宏(?)可以做这种事情。我感兴趣的是它是如何完成的,而不是使用一些包。

最佳答案

您的宏可以创建一个临时变量,它在销毁时调用 endl。临时文件会一直存在,直到封闭的表达式结束,通常是在 ; 处。

#include <iostream>

struct X {
  ~X() { std::cout << std::endl; }
};

#define DBG (X(), std::cout << __FILE__ << " " << __LINE__ << " ")

int main () {
  std::string world(", world");
  DBG << "Hello" << world;
}

关于c++ - 制作一个像流一样的 C++ 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903814/

相关文章:

c - 为什么父窗口的裁剪矩形和子窗口的大小一样?

linux - 如何从 ssh 任务 ant 中获取返回值

c++ - 为动态分配的整数赋值

c++ - RAWINPUT 奇怪的行为

c++ - 如何使用多项式类重载 operator+ 以及返回什么类型

rust - 匹配宏中的多种枚举类型

ubuntu - 我必须操作什么系统文件才能创建宏?

c++ - 在 C++ 头文件中声明重载运算符时遇到问题

python - 使用 (n)curses 打印到终端的右侧或底部

c - quick_exit 和 at_quick_exit 函数有哪些实际应用?