c++带参工厂模式

#include<常用>
#include"消息.h"

元<型名 B,型名...O>构 工厂{
    用 F=函数<独针<B>(O...)>;
    工厂()=删;用 T=无序映<整,F>;
    静 极 注册(整 标识,F f){
        动&t=取();动 p=t.查找(标识);
        如(p==t.尾()){t[标识]=f;中 真;}
        中 假;
    }

    静 独针<B>产生(整 标识,O...o){
        动&t=取();动 p=t.查找(标识);
        如(p!=t.尾())中 p->第二(o...);中 空针;
    }
    静 T&取(){静 T t;中 t;}
};

元<类 B,类 T,型名...O>构 自动工厂{
    静 常 整 标识;静 常 极 呀;
    静 极 注册(){//每种参数都要注册
        中 工厂<B,O...>::注册(T::标识,[](O...o){中 造独<T>(o...);});
    }
};

元<类 B,类 T,型名...O>常 极 自动工厂<B,T,O...>::呀=自动工厂<B,T,O...>::注册();
//这里注册函数.先注册一个,要先注册
元<类 B,类 T,型名...O>常 整 自动工厂<B,T,O...>::标识=强转<整>(&自动工厂<B,T,O...>::呀);
//通过下面的继承就实现了.这里是标识,求值

构 消息:公 消息基,公 自动工厂<消息基,消息,整>{
    整 a;
    消息(整 b):a(b){}
    空 foo()盖{输出<<"消息"<<a<<行尾;}
};//先是基,再是本.如果有多个,还可以注册如:
//构 消息:公 消息基,公 消息基2,公 自动工厂<消息基,消息,整>,公 自动工厂<消息基2,消息,...>{

空 主(){
    动 消息=工厂<消息基,整>::产生(消息::标识,2);
    如(消息){消息->foo();}
}


posted @   zjh6  阅读(18)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示