- C++ 模板元编程是函数式编程,是无副作用的函数(输出雷同,屡次调用输入雷同)。
constexpr
就是标注这个函数无副作用(数值元函数),与之对应的是类型元函数。 - 类型元函数:输出参数为类型,输入参数也为类型。
template <>
struct Fun<int>{
using reference_type = int&;
using value_type = int;
};
输出为int
,输入为Fun<int>::reference_type/value_type
- 当
constexpr
函数传入constexpr
参数时,则进行编译期计算,否则进行运行时计算。 -
元数据分为
- 数值
- 类型
- 模板
- 容器模板:通过可变参数模板作为元数据的容器,另外只在必要时才进行定义。
-
程序、条件分支、循环语句
- 程序
-
条件分支
std::conditional_t
- 偏特化(留神未齐全特化的类中不容许有齐全特化)
std::enable_if_t
当条件为真时返回type
,利用了SFINAE
,匹配失败并非谬误
- 循环:应用递归运算循环,偏特化作为完结的条件。
- 编译器分支和运行时函数相结合,通过元函数在编译期抉择正确的运行时函数。利用
if constexpr
抉择运行时执行的代码。 - CRTP