几天前,在CSDN论坛看到这么一则讨论:在宏定义中怎么使用可变参数?(http://expert.csdn.net/Expert/topic/2925/2925165.xml)。楼主希望能定义这样的macro:
#define fun1(a, b, ...) fun2(__FILE__, __LINE__, a, b, ...)
我猜楼主是想写trace,如果不能使用可变参数的macro,那么就得像MFC那样写一堆TRACE macros:
// 取自 MFC 7.1 的 afx.h
// The following trace macros are provided for backward compatiblity
// (they also take a fixed number of parameters which provides
// some amount of extra error checking)
#define TRACE0(sz) TRACE(_T("%s"), _T(sz))
#define TRACE1(sz, p1) TRACE(_T(sz), p1)
#define TRACE2(sz, p1, p2) TR
C++ 中的变长参数宏实现

本文介绍了如何在C++中实现类似MFC的变长参数宏,以简化trace功能。通过C99的Variadic Macros在GCC中可以方便地实现,但在Visual C++ 7.1不支持的情况下,利用重载`operator()`的类来模拟变长参数,实现既能自动记录文件名和行号,又能使用变长参数调用的功能。文中还提到了ATL的atltrace.h中的实现以及Code Project和CUJ的相关文章作为参考。
最低0.47元/天 解锁文章
1095

被折叠的 条评论
为什么被折叠?



