docs/程序语言/C++/现代C++/现代C++项目实战/宏魔法 #7
Replies: 1 comment
-
|
补充, 有的小伙子可能认为, 感觉还不如 暴力枚举宏呢, 更加简单直观. 这正常的. 但是对于像 MSVC 这种破破编译器, 它最多只支持 127 个参数... 这你就只能支持 < 127 个参数的 for 了. 虽然已经适用 而且你这样做直接引入了 127+ 个宏. 破坏命名空间了吧? 本文的做法, 仅需要引入 不过 10 个宏, 即可实现支持 比如: // 展开宏: 5^5 = 3125 次
#define HX_EVAL(...) \
__HX_MACRO_EVAL1__( \
__HX_MACRO_EVAL1__( \
__HX_MACRO_EVAL1__( \
__HX_MACRO_EVAL1__( \
__HX_MACRO_EVAL1__( \
__VA_ARGS__ \
)))))
#define __HX_MACRO_EVAL1__(...) \
__HX_MACRO_EVAL2__( \
__HX_MACRO_EVAL2__( \
__HX_MACRO_EVAL2__( \
__HX_MACRO_EVAL2__( \
__HX_MACRO_EVAL2__( \
__VA_ARGS__ \
)))))
#define __HX_MACRO_EVAL2__(...) \
__HX_MACRO_EVAL3__( \
__HX_MACRO_EVAL3__( \
__HX_MACRO_EVAL3__( \
__HX_MACRO_EVAL3__( \
__HX_MACRO_EVAL3__( \
__VA_ARGS__ \
)))))
#define __HX_MACRO_EVAL3__(...) \
__HX_MACRO_EVAL4__( \
__HX_MACRO_EVAL4__( \
__HX_MACRO_EVAL4__( \
__HX_MACRO_EVAL4__( \
__HX_MACRO_EVAL4__( \
__VA_ARGS__ \
)))))
#define __HX_MACRO_EVAL4__(...) \
__HX_MACRO_EVAL5__( \
__HX_MACRO_EVAL5__( \
__HX_MACRO_EVAL5__( \
__HX_MACRO_EVAL5__( \
__HX_MACRO_EVAL5__( \
__VA_ARGS__ \
)))))
#define __HX_MACRO_EVAL5__(...) __VA_ARGS__这样支持 3125 个参数, 再多就可能会爆炸啦~ Tip 注意, 似乎写 宏形参 才会有个数限制, 如果是 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
docs/程序语言/C++/现代C++/现代C++项目实战/宏魔法
一、为什么需要学习宏
https://hengxin666.github.io/HXLoLi/docs/%E7%A8%8B%E5%BA%8F%E8%AF%AD%E8%A8%80/C++/%E7%8E%B0%E4%BB%A3C++/%E7%8E%B0%E4%BB%A3C++%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%AE%8F%E9%AD%94%E6%B3%95
Beta Was this translation helpful? Give feedback.
All reactions