- 23 名前:デフォルトの名無しさん mailto:sage [03/10/15 05:50.net]
- >>22
ATL/WTL の「インタフェイス登録式+デフォルト実装提供式」は「使う側」にとっては 結構便利ですよ。なぜテンプレートベースかというと、標準実装においてインタフェイスに 出さない内部的な処理( 以下の例だと IUIAdonerImplWindowless::CreateFont ) を仮想関数 無しで置き換えられるのと、標準実装においては定義していないメンバ変数、メンバ関数も 利用して実装が書けるから( 同 IUIAdonerImplWindoid::GetWindow )。 以下は単純化した例。 class IUIAdoner { public: virtual font get_textFont(void) = 0; }; template class<T> class IUIAdonerImplWindowless { protected: font m_font; void CreateFont(font& f) { f = SysCreateFont(); }; public: IUIAdonerImpl() { T::CreateFont(m_font); } virtual font get_textFont(void) { return m_font; } }; template class<T> class IUIAdonerImplWindoid { public: IUIAdonerImplWindoid() {} virtual font get_textFont(void) { return SysGetWindowFont(T::GetWindow()); } };
|

|