ATL中__if_exists的替代方案

ATL中__if_exists的替代方案

💡 原文英文,约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与头文件单元兼容,带来更好的性能。

➡️

继续阅读