#模板元编程
SFINAE
编译器在尝试将模版形参替换为模板实参的时候,如果替换后得到的结果不是合法的代码(替换失败),编译器不会报错,而仅仅是忽略它
万能引用和完美转发
万能引用可以保证接受左值还是右值;完美转发可以保证接受左值传递左值,接受右值传递右值
模板元编程
元程序是在编译期由编译器直接解析并执行的
模板特化
函数模板不支持偏特化,会和函数重载发生歧义,但是也有解决之道
模板参数
模板模板参数 可能不大好理解,能看懂,后面再考虑运用的事情
模板中头文件和源文件的处置方式
只有实例化模板,编译器才能生成实际的代码,而我们之前只在头文件这种实现方式,是因为编译器根据我们的使用,知道我们需要什么类型的模板,生成实际的代码,比如实际的函数,实际的类,实际的变量等,然后再去调用。编译器的这种行为,我们称之为“隐式实例化模板”
模板编程中的可变参展开
C++11 和 C++17 的展开方式
模板元编程的意义
模板元编程可以只需要设计一份代码,传入不同的类型并生成实际的代码,完美解决面向过程和面向对象的不足