我有问题,std :: numeric_limits :: min()与"windef.h"中定义的"min"宏冲突.有没有办法解决这个冲突而不取消定义"min"宏.下面的链接提供了一些提示,但是我无法使用带有静态成员函数的括号.
我可以使用宏的一些技巧?
先感谢您.
解决方法是使用括号: int max = (numeric_limits
它允许你包括windef.h
,不需要你#undef max
(可能有不良的副作用),没有必要#define NONIMAX
.奇迹般有效!
唯一真正通用的解决方案是不在头文件中包含windows.h.
那个标题是一个杀手,它可以做任何事情来使你的代码爆炸.如果没有启用MSVC语言扩展,它将无法编译,这是我见过的最糟糕的宏滥用示例.
将其包含在单个.cpp文件中,然后在包含其余代码的标头中公开包装器.如果windows.h不可见,则不会与您的名字冲突.
对于min/max案例,你可以#define NOMINMAX
在包括windows.h之前.然后它将不定义那些特定的宏.