15 October 2023

C++ 核心指南目录

“Use template metaprogramming only when you really need to”

理由

模板元编程很难写正确,降低编译速度,经常很难维护。然而,也有一些实际使用的例子。比如,模板元编程可以比专家级别的汇编代码提供更好的性能。也有一些实际例子中,模板元编程可比运行时代码更好的表达基础思想。比如,你真的需要在编译时进行 AST 操作(比如,可选的矩阵运算符折叠)。这些情况,在 C++ 中可能没有其他方法了。

坏例子

enable_if

其他方案,也可以使用概念 concept。

其他方案

如果结果是个数值,而不是个类型,可以用 constexpr 函数。

注意

如果你感觉需要宏定义隐藏模板元编程,很可能你已经走得太远了。