template_meta_program
常用方法
enable_if
https://www.cnblogs.com/3d-gis/articles/14392648.html
std::enable_if<>是一种类型萃取(type trait), 它会根据一个作为其(第一个)模 板参数的编译期表达式决定其行为: - 如果这个表达式结果为 true,它的 type 成员会返回一个类型: -- 如果没有第二个模板参数,返回类型是 void。 -- 否则,返回类型是其第二个参数的类型。 - 如果表达式结果 false,则其成员类型是未定义的。根据模板的一个叫做 SFINAE (substitute failure is not an error,替换失败不是错误)的规则, 这会导致包含 std::enable_if<>表达式的函数模板被忽略掉
基础
模板函数和模板成员函数只有在被调用的时候才会实例化,从而允许只使用部分模版
两段编译检查:
- 模板定义阶段:语法检查,未定义类型检查,与模板参数无关部分的检查
- 模板实例化阶段:与模板参数相关的检查
3.a template declaration cannot appear at block scope 通常模板(包含 Alias Templates)只可以被声明和定义在 global/namespace 作用域, 或者在一个类的声明中。
- 推断指引(Deduction Guides)是C++17语法。作用是当创建一个模板类时,可以通过 “推断指引 来提供额外地模板参数推断规则,或者修正已有的模板参数推断规则。 https://www.cnblogs.com/GEEK-ZHAO/p/15766331.html
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!