【C++模板】特化与偏特化 template [partial] specialization
生活随笔
收集整理的这篇文章主要介绍了
【C++模板】特化与偏特化 template [partial] specialization
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1 template specialization 模板特化
一般情况下类模板定义如下:
template<class Window, class Controller> class Widget {... 泛化实现代码 ... }; 特化是指把类模板中指定的class T变成具体的类型:class Widget<ModalDialog, MyController> {... 特化实现代码 ... }; 其中ModalDialog和MyController是你自己另外定义的类.
有了这个Widget的特化定义之后,如果你以后定义了Widget<ModalDialog, MyController>对象时,编译器就会使用上述的特化定义.
如果定义了其它泛型对象,那么编译器就是用原本的泛化定义.
这就是模板的特化.
2 template partial specialization 模板偏特化
模板特化是通过"给模板中的所有模板参数一个具体的类"的方式来实现的.而模板偏特化则是通过"给模板中的部分模板参数以具体的类,而留下剩余的模板参数仍然使用原来的泛化定义"的方式来实现的.
template<class Window> //仍然使用原来的泛化定义; class Widget<Window, MyController> //MyController是具体的类,是特化定义; {... 偏特化实现代码 ... }; 模板的偏特化能力很强大.当你实例化一个模板时,编译器会把目前存在的偏特化模板和全特化模板做比较,并找出其中最合适、最匹配的实现.这样,灵活性就很大.
模板的偏特化机制不能用在函数身上,不论成员函数还是非成员函数.
3 注意
Date: 2011-10-21 17:30:04
HTML generated by org-mode 6.33x in emacs 23
总结
以上是生活随笔为你收集整理的【C++模板】特化与偏特化 template [partial] specialization的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C# 视频监控系列(11):H264播放
- 下一篇: C++沉思录