gpt4 book ai didi

c++ - 使用 C++ 宏检查变量是否存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:48 30 4
gpt4 key购买 nike

我正在为我的图书馆创建一个日志工具,并制作了一些不错的宏,例如:

#define DEBUG  myDebuggingClass(__FILE__, __FUNCTION__, __LINE__)
#define WARING myWarningClass(__FILE__, __FUNCTION__, __LINE__)

其中 myDebuggingClass 和 myWarningClass 都有一个重载的 << 运算符,并且对日志消息做一些有用的事情。

现在,我有一些用户将重载的名为“Widget”的基类,我想将这些定义更改为更类似的内容:

#define DEBUG  myDebuggingClass(__FILE__, __FUNCTION__, __LINE__, this)
#define WARNING myWarningClass(__FILE__, __FUNCTION__, __LINE__, this)

这样当用户调用'DEBUG << "Some Message"; ' 我可以检查“this”参数是否 dynamic_casts 到 Widget,如果是,我可以用该信息做一些有用的事情,如果不是,那么我可以忽略它。唯一的问题是我希望用户也能够从非成员函数(例如 main())发出 DEBUG 和 WARNING 消息。然而,给定这个简单的宏,用户只会得到一个编译错误,因为“this”不会在类成员函数之外定义。

最简单的解决方案是定义单独的 WIDGET_DEBUG、WIDGET_WARNING、PLAIN_DEBUG 和 PLAIN_WARNING 宏,并向用户记录差异,但如果有办法解决这个问题,那就太好了。有没有人见过做这种事情的任何技巧?

最佳答案

在Widget类中声明一个全局的Widget* const widget_this = NULL;和一个 protected 成员变量widget_this,初始化为this,以及做

#define DEBUG myDebuggingClass(__FILE__, __FUNCTION__, __LINE__, widget_this)

关于c++ - 使用 C++ 宏检查变量是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190275/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com