#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);
如(消息){消息->foo();}
}