ein*_*ica 3 c++ macros idioms c++17
在C++中,许多开发人员(甚至可能是我们大多数人)不喜欢宏,并试图避免使用正确的语言结构.并且 - 似乎语言也倾向于鼓励这一点.渐渐地,我们已经能够在很多情况下摆脱宏观使用:
#include警卫 - > #pragma once对于一些编译器,虽然我猜你不能相信; 很快我们应该有C++ 17模块而import不是include.我的问题是 - 还剩下什么?什么样的宏观使用是完全不可避免的,或者是非常痛苦的避免?我能想到的主要例子是:
使用文件名,行号和函数/方法名称:
#define LOG(whatever, ...) log(__FUNCTION__, __FILE__, __LINE__, whatever, VA_ARGS)
Run Code Online (Sandbox Code Playgroud)用于将代码块作为"参数"的语法糖,例如
AT_SCOPE_EXIT { release_resource(); }
Run Code Online (Sandbox Code Playgroud)
在Andrei Alexandrescu的ScopeGuard中(或观看视频).虽然我想我们真的不需要使用简洁的宏使用伪语法.
我错过了宏的其他重要用途?(请不要超级特殊的角落情况.)
禁用代码部分而不必担心嵌套注释.
#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)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |