《C++模板元编程实战》读书笔记

  1. C++模板元编程是函数式编程,是无副作用的函数(输入相同,多次调用输出相同)。constexpr就是标注这个函数无副作用(数值元函数),与之对应的是类型元函数。
  2. 类型元函数:输入参数为类型,输出参数也为类型。
template <>
struct Fun{
    using reference_type = int&;
    using value_type = int;
};

输入为int,输出为Fun::reference_type/value_type

  1. constexpr函数传入constexpr参数时,则进行编译期计算,否则进行运行时计算。
  2. 元数据分为

    1. 数值
    2. 类型
    3. 模板
  3. 容器模板:通过可变参数模板作为元数据的容器,另外只在必要时才进行定义。
  4. 顺序、条件分支、循环语句

    1. 顺序
    2. 条件分支

      1. std::conditional_t
      2. 偏特化(注意未完全特化的类中不允许有完全特化)
      3. std::enable_if_t 当条件为真时返回type,利用了SFINAE,匹配失败并非错误
    3. 循环:使用递归运算循环,偏特化作为结束的条件。
  5. 编译器分支和运行时函数相结合,通过元函数在编译期选择正确的运行时函数。利用if constexpr选择运行时执行的代码。
  6. CRTP

你可能感兴趣的:(c++)