Loki库里的Cyclic Visitor

原创 2007年09月19日 17:17:00

Loki给你一个选择,你可以使用经典GoF描述的Visitor模式,但是,使用这个模式获得效率的同时使你的修改更为麻烦,其实理想的办法是是使用Acyclic模式,当稳定后要优化的时候再改为Cyclic模式。

我这个给一个使用Cyclic模式的完整代码(头文件和名称空间要自己处理)。

class VA;
class VB;
class VC;
typedef    CyclicVisitor
<void,LOKI_TYPELIST_3(VA,VB,VC)>    MyVisitor;

class VBase
{
public:
    
virtual    void    Accept(MyVisitor& v)    = 0;
public:
    
virtual    void    say(){cout<<"I am base class"<<endl;}
}
;

class VA    :public    VBase
{
public:
    LOKI_DEFINE_CYCLIC_VISITABLE(MyVisitor)
public:
    
void    say(){cout<<"I am VA"<<endl;}
}
;

class VB    :public    VBase
{
public:
    LOKI_DEFINE_CYCLIC_VISITABLE(MyVisitor)
public:
    
void    say(){cout<<"I am VB"<<endl;}
}
;

class VC    :public    VBase
{
public:
    LOKI_DEFINE_CYCLIC_VISITABLE(MyVisitor)
public:
    
//void    say(){cout<<"I am VC"<<endl;}
}
;

class ConcretVisitor    :public    MyVisitor
{
public:
    
void    Visit(VA& vb)
    
{
        vb.say();
    }

    
void    Visit(VB& vb)
    
{
        vb.say();
    }

    
void    Visit(VC& vb)
    
{
        vb.say();
    }

}
;

int _tmain(int argc, _TCHAR* argv[])
{
    ConcretVisitor    cv;
    VA    va;
    VB    vb;
    VC    vc;
    va.Accept(cv);
    vb.Accept(cv);
    vc.Accept(cv);
    
return 0;
}

 

相关文章推荐

库里韩德武

  • 2014年08月20日 19:34
  • 36KB
  • 下载

如何向github库里上传自己的项目

在操作之前呢,先给大家说一下使用的原理:利用自己在github官网上申请账号时的邮箱,利用Git工具提供的命令生成一个秘钥(在本地的位置后边会介绍),这个秘钥是用来干什么的呢?在电脑中找到这个秘钥,在...

模拟实现boost库里的智能指针

智能指针 什么是智能指针呢,它是行为类似于指针的类对象,但这种对象还有其他功能。我们为什么要封装智能指针类对象呢?这是因为C++中的动态内存需要用户自己来维护,动态开辟的空间,在出函数作用域或者程序...
  • jyy305
  • jyy305
  • 2017年07月11日 12:55
  • 139

【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法

本文介绍如何使用STL里的heap(堆)算法。第一次接触heap这种数据结构是在大学的数据结构教材上,它是一棵完全二叉树。在STL中,heap是算法的形式提供给我们使用的。包括下面几个函数: mak...
  • elloop
  • elloop
  • 2016年11月29日 23:41
  • 819

标准库里的weak_ptr如何解决循环引用所带来的问题

#include #include #include using namespace std; templateclass T> class Node { public: Node(T num...

svn 回滚版本库里的版本

回滚版本库里的版本 使用版本日志对话框 如果想恢复某个版本或者版本范围的变更,最简单的方法是使用版本日志对话框。这种方法也可以用来撤销最近的若干...

静态库和动态库里的全局变量(或类的静态成员变量)共享和独立的问题

本文将要讨论的内容实际上包含2个问题: 1. 工程中包含静态库A,动态库B,可执行程序C。C依赖于A和B,而B依赖于A。在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行...
  • guggy
  • guggy
  • 2012年11月01日 13:24
  • 5531

C++ 使用开源库里.h文件和.lib文件的步骤

用C++编译DCMTK库文件,CMAKE编译完成后生成如下目录因为刚开始使用C++,不知道如何引用,于是研究学习了一下。在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1、添加工程的头文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Loki库里的Cyclic Visitor
举报原因:
原因补充:

(最多只允许输入30个字)