在C++實際應用中,經常遇到需要處理n多命令的場景。比如輸入是xml的字符串,需要根據里面的定義實現不同的處理功能。
在這種場景下,我們通常是接收xml作為一個接口,在里面分析出來命令類型,然后使用一堆的if else語句來進行處理。
但是在這種極其具有統一性的場景中,還可以使用函數處理指針,來進行處理。
例如:
#include <string> #include <map> class MsgDealer { public: typedef void (MsgDealer::*on_msg)(const std::string& msg); void OnMsg1(const std::string& msg); void OnMsg2(const std::string& msg); MsgDealer() { m_mapDeals["on_msg_1"] = &MsgDealer::OnMsg1; m_mapDeals["on_msg_2"] = &MsgDealer::OnMsg2; } virtual ~MsgDealer(){} void OnCmd(const std::string& type, const std::string& msg){ std::map<std::string, on_msg>::iterator iter = m_mapDeals.find(type); if (iter != m_mapDeals.end()) { (this->*(iter->second))(msg); } }; private: std::map<std::string, on_msg> m_mapDeals; };
