【发布时间】:2013-10-07 02:32:33
【问题描述】:
在C++我的项目开发过程中,我经常需要调试,我通常使用这个宏来做它
#define DBUG(a) {std::cout << #a << " : " << a << std::endl;};
但很多时候我需要做这样的事情
int a;
std :: string b;
double c;
...
...
DBG(a); DBG(b); DBG(c);
但理想情况下,可能只写DBUG(a, b, c) 或DBG(a, b, c, d, e) 以获得更多变量来实现这样的目标。经过一些研究,这看起来像是元编程或更具体的代码生成中的一个问题,但由于我在这些领域的知识有限,我找不到解决方法。
如果可能,我想在不使用 Boost 或其他外部库的情况下解决此问题,并使用 C++98 中的功能,但如果不可能,我愿意使用 C++11。
【问题讨论】:
-
这个问题的标题有点模糊,如果你有更好的想法,请编辑它。
-
Google 获取可变参数宏,这应该可以帮助您(并避免
endl,可能会通过使用预处理器连接字符串来减少对operator<<的调用次数......) -
是否可以使用可变参数宏来做类似
#define DBUG1(...) DBUG(arg1);DBUG(arg2);...;DBUG(argk);的事情 -
为什么不使用调试器?它们非常擅长显示变量的值。
-
没错,我可以使用
gdb,但我更喜欢老式的打印变量的方式来调试。两者各有利弊。
标签: c++ templates macros metaprogramming