Partial Template Specialization让你在template 的所有可能实体中特化出一组子集
template <class window,class Controller>
class Widget
{
}
example
template <>
class Widget<ModalDialog,MyController>
{
}
其中ModalDialog和MyController是你另外定义的class
this Partial Template Specialization
template <class Window>
template Widget <Window,MyController>
{
...
}
template <class ButtonArg>
class Widget<Button<ButtonArg>,MyController>
{
}
注意:偏特化机制不能用于函数身上,这样会降低你所作出来的弹性和粒度
虽然可以全特化class template中的成员函数,但你不能偏特化它们,但可以用函数重载方式实现
example
template <class T ,class U>T Fun(U obj);
template<class T>T Fun(Window obj);
local class
void Fun() { class local { ...member variables... ...member function definitions.... } ....code using Local..... }class Interface { public: virtual void Fun()=0; ... }
template <class T,class P> Interface * MakeAdapter(const T &obj,const P &arg) { class Local:public Interface { public: Local (const T&obj,const P&arg) { virtual void Fun() { obj_.Call(arg_) } private: T obj_; P arg_; } return new Local(obj,arg); }
} 本地类可以时间接口转换为另一个接口,其次本地类不可被继承,这在java 中成为final