💡
原文英文,约600词,阅读约需3分钟。
📝
内容提要
ATL中的__if_exists和__if_not_exists关键字允许用户在编译时测试标识符是否存在,但存在问题,且与C++20模块特性不兼容。Visual Studio 2022 17.2 Preview 3开始,ATL有了新的宏_ATL_MODULES,可以替代__if_exists,并可以使用/permissive-编译器模式。
🎯
关键要点
-
__if_exists和__if_not_exists关键字允许在编译时测试标识符是否存在。
-
这两个关键字在使用时存在问题,并与C++20模块特性不兼容。
-
从Visual Studio 2022 17.2 Preview 3开始,ATL引入了新的宏_ATL_MODULES来替代__if_exists。
-
使用现代的/permissive-编译器模式时,必须使用新的宏,而不是旧的__if_exists和__if_not_exists。
-
一些ATL宏因__if_exists的移除而发生变化,用户需注意新版本的使用。
-
使用_ATL_MODULES标志可以使ATL与头文件单元兼容,带来更好的性能。
➡️