暴力双分派再论TList

来源:互联网 发布:struts2 json result 编辑:程序博客网 时间:2024/05/21 05:58

TypeList是Loki从外星引进的强大引擎, TypeList由模板支持构建,但是被构建出来的TypeList给了模板神奇的能力,Loki给予新知,源于模板,Loki给予震撼,源于TypeList。

其实TList很简单,但是它给我们带来的便利让我们如何赞扬它都不为过。

其实,在暴力双分派的对称处理中,我们只使用了TList::IndexOf工具,为了支持对称分派,我们在调用的时候做手脚:

template    <bool swapArgs,class SomeLhs,class SomeRhs>
struct    InvocationTraits
{
    
static    void    DoDispatch(SomeLhs& lhs,SomeRhs& rhs,Executor& exec)
    
{
        exec.Fire(lhs,rhs);
    }

}
;
template    
<class SomeLhs,class SomeRhs>
struct    InvocationTraits<true,SomeLhs,SomeRhs>
{
    
static    void    DoDispatch(SomeLhs& lhs,SomeRhs& rhs,Executor& exec)
    
{
        exec.Fire(rhs,lhs);
    }

}
;

这非常简单,编译器的选择操作。神奇之处在于bool值的获得方法:

static    void    DispatchRhs(BaseLhs& lhs,BaseRhs& rhs,Executor exec)
{
    
if (Head* p2 =dynamic_cast<Head*>(&rhs))
    
{
        
enum    {swapArgs    = IndexOf<Head,RTList>::result < IndexOf<BaseLhs,LTList>::result};
        InvocationTraits
<swapArgs,BaseLhs,Head>::DoDispatch(lhs,*p2);
    }

}

Loki对这个操作有更精致的做法。

仅此一处对IndexOf的使用,就足以说明,对TypeList学习时间的付出是完全值得的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小蜜丸吃不下去怎么办 铜钱的字不认识怎么办 古钱币出手好烦怎么办 安装目录不可写怎么办 手机不支持exfat格式怎么办 windows7图标变大了怎么办 igs格式烂曲面怎么办 手机桌面文件夹打不开怎么办 苹果下载不了150怎么办 iphone6速度变慢怎么办 苹果手机微信打不开pdf怎么办 苹果手机打不开pdf怎么办 pdf文件超过了怎么办 pdf电脑删不了怎么办 联想笔记本摄像头横屏调竖屏怎么办 pdf文件打开失败怎么办 pdf复制文字乱码怎么办 电子发票乱码了怎么办 超星尔雅挂了怎么办 电脑应用双击打不开怎么办 电脑控制面板打不开怎么办 转换器无法打开文件怎么办 电脑文件无法打开怎么办 手机上jpg打不开怎么办 脸上全是黄褐斑怎么办 容易发胖的体质怎么办 感冒后一直咳嗽怎么办 感冒咳嗽怎么办小窍门 到了减肥平台期怎么办 减肥遇见平台期怎么办 脚冻伤了痒怎么办 冬天脚后跟冻了怎么办 夏天脚冻了怎么办 导航软件删了怎么办 婆婆爱打孩子怎么办 乙肝婆婆带孩子怎么办 婆婆不会教孩子怎么办 婆婆不会带孩子怎么办 公婆枪带孩子怎么办 婆婆要带孩子怎么办 婆婆太惯孩子怎么办