??????????
??????????????????????????????????????????????????????????switch-case????????key????????????????????????????α????
Message* create(int type)
{
switch (type)
{
case MSG_PGSTATS:
m = new MPGStats;
break;
case MSG_PGSTATSACK:
m = new MPGStatsAck;
break;
case CEPH_MSG_STATFS:
m = new MStatfs;
break;
case CEPH_MSG_STATFS_REPLY:
m = new MStatfsReply;
break;
case MSG_GETPOOLSTATS:
m = new MGetPoolStats;
break;
default:
break;
}
}
?????????????????????????????????switch-case????????????????????????п??????????case???????????????????????????????????????????????????????Ρ????????Щ??????switch-case?????????????????????????????????????????????????????????
????????????????????????-????????????????????????д?????????????????????????????switch-case???
??????????
??????????????????????·???£?
?????????????????????
?????????????????洴???????key???????????
?????????????????????????????????????????????
??????????????????????????
????????????????е?????????????????
???????У????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Щ?????????????????????????????????????塣
???????????????????C++11??????????????????????
??????????????????????
????struct factory
????{
????static factory& get()
????{
????static factory instance;
????return instance;
????}
????private:
????factory() {};
????factory(const factory&) = delete;
????factory(factory&&) = delete;
????static std::map<std::string?? std::function<Message*()>> map_;
????};
??????C++11?е???????????????????????????????????????ü??????????????????????????????C++11?о?????????????????????????????????????map??map???????????function???????????????