1、必须认识在C++中使用template时,有哪些类型的参数。形如template<typename T, std::size_t n>,可知:(1)type template parameters(类型模板参数);(2)non-type template parameters(非类型模板参数)。
2、必须认识template参数可作用的对象有哪些?(1)作用于类class时,称为class template(类模板);(2)作用与函数function时,称为function template(函数模板)。
3、为什么要将参数无关的代码抽离template,是因为定义template(模板)的时候是不会产生可运行代码的,只有通过模板具体实现某个类或者函数的时候(统称具现化),由于不同的参数类型或者非类型参数不同的值可能导致大量的充分代码而产生目标代码(可执行代码)的体积剧增,为了瘦身和执行效率必须考虑本条款。
4、针对非类型模板参数,特别是用非类型模板参数定义数组的大小时,可以将"非类型模板参数”转换为函数参数,以及使用指针指向数组的组合方式去掉“非类型模板参数”及优化相关代码,实现只有1份程序在运行。
5、针对“类型模板参数”,对于所有类型具现化都相同的代码,可以将类型转换为类型指针并在其底层添加一层void*(无类型指针)的函数参数合并所有通用代码,从而实现具现化时只有1份目标代码。
6、上述内容仅供参考,具体还是要针对不同的情况具体分析,还有需要结合编译器的优化程度具体分析。