学习AA大神c++设计新思维笔记:10访问者模式

访问者模式

用来不改变原继承体系下,实现新的功能.方便添加新类,但不容易添加新虚函数,可以参考这里,两个是一样的.只是祁大神的的没有返回的R参数.
访问者,始终有个动转.能否再用CRTP消灭掉这个运转呢?
将各种概念性操作,提取出来,放在一起.
应该这样,提取出最基本的操作,然后扩展,泛化.
无循环访问,与循环访问.尽量把代码提取到库中.
访问器依赖每个待访问类,在每个允许访问的类中,加个允许访问宏.当然参数为(基访问器*)
通过这个基访问基*实现多态.当然也可不用宏,具体实现.
可以找型列相似结构.元<型名...T>();,catchall是处理各种异常/错误的意思.访问者最适合对象上操作截然不同且互不相干,这样围绕某个概念的实现聚集在一起.理想是只添加,不修改.

元<型名 R,类 T列表>
类 循环访问者:公 访问者<T列表,R>
{
公:
    又 R 中类型;

    元<类 访问>
    中类型 通用访问(访问&主机)
    {
        访问者<访问,中类型>&子对象=*本;
        中 子对象.访问(主机);
    }
};

#定义 定义循环可访问(一些访问者)\
    虚 一些访问者::中类型 接受(一些访问者&客户)\
    {中 客户.通用访问(*本);}
//循环访问者
    又 循环访问者<空,类型列表_3(基元素,发明,问题日志)>一访问者;
    构 成就访问者:公 一访问者{//依赖接口而实现
        空 访问(基元素&be){}
        空 访问(发明&发明){}
        空 访问(问题日志&f){}
    };//使用
posted @   zjh6  阅读(10)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示