【C++テンプレート】特化と偏特化template[partial]specialization
2297 ワード
1 template specializationテンプレート特化
一般的にクラステンプレートは次のように定義されます.
template<class Window, class Controller>
class Widget
{
... ...
};
特化とは、クラステンプレートに指定されているclass Tを具体的なタイプにすることです.class Widget<ModalDialog, MyController>
{
... ...
};
ModalDialogとMyControllerはあなた自身が別途定義したクラスです.このWidgetの特化定義がある後、Widget
他の汎用オブジェクトが定義場合、コンパイラは元の汎用化定義を用いる.
これがテンプレートの特化です.
2 template partial specializationテンプレートの偏特化
テンプレートの特化は、「テンプレート内のすべてのテンプレートパラメータに具体的なクラスを与える」ことによって実現する.テンプレートの偏特化は、「テンプレートの一部のテンプレートパラメータを具体的なクラスで与える、残りのテンプレートパラメータを元の汎化定義で残す」ことによって実現する.
template<class Window> // ;
class Widget<Window, MyController> //MyController , ;
{
... ...
};
テンプレートの偏特化能力は非常に強い.テンプレートをインスタンス化すると、コンパイラは現在存在する偏特化テンプレートと全特化テンプレートを比較し、その中で最も適切で、最も一致する実現を見つけます.これにより、柔軟性が大きい.
テンプレートの偏特化メカニズムは、メンバー関数であろうと非メンバー関数であろうと、関数に使用できない.
3注意
Author: visaya fan
Date: 2011-10-21 17:30:04
HTML generated by org-mode 6.33x in emacs 23