C++模板特化详解

编程入门 行业动态 更新时间:2024-10-08 10:55:39

C++模板<a href=https://www.elefans.com/category/jswz/34/1466566.html style=特化详解"/>

C++模板特化详解

一、为什么需要模板特化

这周四,帮一个长相英俊的同事排查问题,他写了一段类似于这样的逻辑:

class student{int age = 25;
public:void mycout(){cout<<age<<endl;}
};template<typename T>
class Base
{T t;
public:Base(T t):t(t){}void display(){if(1==0){cout<<t<<endl;} }
};int main() {student stu;Base<student> base(stu);base.display();
}

看起来能编译通过,因为cout<<t<<endl,也就是cout<<stu<<endl这个不合理的逻辑永远不会被执行。但是,这个是编译不过的。
因为实例化后,编译器会二次编译实例化后的代码,cout<<stu这种行为,在二次编译的过程中会被检查出来有语法错误。
有个有意思的事情,去掉base.display();后,编译不会报错。根据《C++ primer》中的解释,对于类模板中的成员函数,即使在类模板实例化以后,如果这个函数不被调用,那么也不会被具体化。
言归正传,这个问题的解决方案就是模板特化!!!

更多推荐

C++模板特化详解

本文发布于:2023-11-15 09:28:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1597421.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:特化   详解   模板

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!