模板特化与本地类

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值