【C++】模板特例化

C++模板的特化详解(函数模版特殊,类模版特化)_CHENG Jian的博客-CSDN博客_模板特化

C++ 模板特化与偏特化_恋喵大鲤鱼的博客-CSDN博客_模板特化  

https://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810372.html

https://blog.csdn.net/thefutureisour/article/details/7964682

https://blog.csdn.net/m_buddy/article/details/72973207?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-72973207-blog-82179205.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-72973207-blog-82179205.pc_relevant_default&utm_relevant_index=1

 

模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。

 

目前的标准中,模板函数只能全特化,没有偏特化

至于为什么函数不能偏特化,似乎不是因为语言实现不了,而是因为偏特化的功能可以通过函数的重载完成。

 

程序运行结果和使用函数模板特化相同。但是,使用普通函数重载和使用模板特化还是有不同之处,主要表现在如下两个方面:

(1)如果使用普通重载函数,那么不管是否发生实际的函数调用,都会在目标文件中生成该函数的二进制代码。而如果使用模板的特化版本,除非发生函数调用,否则不会在目标文件中包含特化模板函数的二进制代码。这符合函数模板的“惰性实例化”准则。

(2)如果使用普通重载函数,那么在分离编译模式下,需要在各个源文件中包含重载函数的申明,否则在某些源文件中就会使用模板函数,而不是重载函数。

posted @ 2022-08-10 15:09  星火-AI  阅读(121)  评论(0编辑  收藏  举报