在Windows标头中处理侵入式#defines的最佳方法是什么?当我真的需要定义具有相同名称的符号时,无论它是否在命名空间中,它们都会发出错误。我知道WIN32_LEAN_AND_MEAN可以避免一些定义,但不是全部。在这种特殊情况下,我在WinNT.h#6478中遇到了一个“DELETE”定义 - 并且有很多这样的非常通用的关键字。
我的直接想法是在声明我的常数之前做一个#undef,但这是一个非常不优雅的解决方案。我不能轻易地重命名我的常量,因为它们被直接翻译成文本字符串,我需要它们正是它们现在的样子。
我想到的其他定义是windowsx.h中的GetFirstChild / GetNextSibling ......真的吗?
答案 0 :(得分:1)
实际上,我认为最干净的解决方案是提供一个包装器标头,该标头会#include <windows.h>
和#undef
所有阻碍你的方式的宏。然后,您将包含此包装器标头而不是windows.h
。
答案 1 :(得分:0)
显而易见的解决方案是不包括<windows.h>
。那里
应该是非常非常少的模块需要它,在那些,
你只需要避免<windows.h>
定义的符号。
哪个不应该太难,因为那些会很低
等级包装,不需要包含你的任何东西
应用。
答案 2 :(得分:0)
我的解决方案是“不包括<windows.h>
,除非绝对必要”。通常,您希望将系统依赖关系分离为一小组代码,因此在文件中包含<windows.h>
不是一个坏主意。