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