rcv*_*rcv 5 c++ macros metaprogramming
我正在为我的库创建一个日志记录工具,并制作了一些不错的宏,例如:
#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__)
#define WARING myWarningClass(__FILE__, __FUNCTION__, __LINE__)
Run Code Online (Sandbox Code Playgroud)
其中 myDebuggingClass 和 myWarningClass 都有一个重载的 << 运算符,并对日志消息做一些有用的事情。
现在,我有一些用户将重载的基类称为“Widget”,我想将这些定义更改为更类似的内容:
#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__, this)
#define WARNING myWarningClass(__FILE__, __FUNCTION__, __LINE__, this)
Run Code Online (Sandbox Code Playgroud)
这样当用户调用 'DEBUG << "Some Message"; ' 我可以检查“这个”参数是否动态转换到小部件,如果是,我可以用这些信息做一些有用的事情,如果没有,我可以忽略它。唯一的问题是我希望用户也能够从非成员函数(例如 main())发出 DEBUG 和 WARNING 消息。然而,给定这个简单的宏,用户只会得到一个编译错误,因为“this”不会在类成员函数之外定义。
最简单的解决方案是定义单独的 WIDGET_DEBUG、WIDGET_WARNING、PLAIN_DEBUG 和 PLAIN_WARNING 宏并向用户记录差异,但如果有办法解决这个问题,那就太酷了。有没有人看到做这种事情的任何技巧?
在 Widget 类中声明一个全局Widget* const widget_this = NULL;成员变量和一个受保护的成员变量,初始化为,然后执行widget_thisthis
#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__, widget_this)
| 归档时间: |
|
| 查看次数: |
3550 次 |
| 最近记录: |