模板特化与本地类

时间:2022-05-25 20:51:30

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