【C++模板】特化与偏特化 template [partial] specialization
生活随笔
收集整理的這篇文章主要介紹了
【C++模板】特化与偏特化 template [partial] specialization
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1?template specialization 模板特化
一般情況下類模板定義如下:
template<class Window, class Controller> class Widget {... 泛化實(shí)現(xiàn)代碼 ... }; 特化是指把類模板中指定的class T變成具體的類型:class Widget<ModalDialog, MyController> {... 特化實(shí)現(xiàn)代碼 ... }; 其中ModalDialog和MyController是你自己另外定義的類.
有了這個(gè)Widget的特化定義之后,如果你以后定義了Widget<ModalDialog, MyController>對(duì)象時(shí),編譯器就會(huì)使用上述的特化定義.
如果定義了其它泛型對(duì)象,那么編譯器就是用原本的泛化定義.
這就是模板的特化.
2?template partial specialization 模板偏特化
模板特化是通過(guò)"給模板中的所有模板參數(shù)一個(gè)具體的類"的方式來(lái)實(shí)現(xiàn)的.而模板偏特化則是通過(guò)"給模板中的部分模板參數(shù)以具體的類,而留下剩余的模板參數(shù)仍然使用原來(lái)的泛化定義"的方式來(lái)實(shí)現(xiàn)的.
template<class Window> //仍然使用原來(lái)的泛化定義; class Widget<Window, MyController> //MyController是具體的類,是特化定義; {... 偏特化實(shí)現(xiàn)代碼 ... }; 模板的偏特化能力很強(qiáng)大.當(dāng)你實(shí)例化一個(gè)模板時(shí),編譯器會(huì)把目前存在的偏特化模板和全特化模板做比較,并找出其中最合適、最匹配的實(shí)現(xiàn).這樣,靈活性就很大.
模板的偏特化機(jī)制不能用在函數(shù)身上,不論成員函數(shù)還是非成員函數(shù).
3?注意
Date: 2011-10-21 17:30:04
HTML generated by org-mode 6.33x in emacs 23
總結(jié)
以上是生活随笔為你收集整理的【C++模板】特化与偏特化 template [partial] specialization的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# 视频监控系列(11):H264播放
- 下一篇: 戒烟后梦到自己抽烟代表什么