使用C++ 14/17时,哪些宏用途仍然是不可避免的?

ein*_*ica 3 c++ macros idioms c++17

在C++中,许多开发人员(甚至可能是我们大多数人)不喜欢宏,并试图避免使用正确的语言结构.并且 - 似乎语言也倾向于鼓励这一点.渐渐地,我们已经能够在很多情况下摆脱宏观使用:

  • 类型多态 - >模板编程
  • 条件编译 - >模板参数的编译时评估,SFINAE等
  • #include警卫 - > #pragma once对于一些编译器,虽然我猜你不能相信; 很快我们应该有C++ 17模块而import不是include.

我的问题是 - 还剩下什么?什么样的宏观使用是完全不可避免的,或者是非常痛苦的避免?我能想到的主要例子是:

我错过了宏的其他重要用途?(请不要超级特殊的角落情况.)

Dev*_*lar 6

禁用代码部分而不必担心嵌套注释.

#if 0
...
#endif
Run Code Online (Sandbox Code Playgroud)

各种条件编译.

// C/C++ dual-purpose headers
#if __cplusplus
extern "C" {
#endif

// checking third-party library versions for API compatibility
#if BOOST_VERSION >= 104600
...
#endif

// checking platforms for API compatibility
#if _WIN32
...
#endif
Run Code Online (Sandbox Code Playgroud)