使用標準庫和函數指標簡化switch語句

來源:互聯網
上載者:User

CopyRight by MikeFeng

    如果你是一個Windows GUI程式員,那麼經常應該會碰到對於訊息的switch吧。面對冗長的switch語句,有什麼簡化方法呢?

    很容易想到對switch的每個case進行封裝,這樣你的switch就會像下面一樣:

switch(1) {  case 1:     func1();     break;  case 2:     func1();     break;  default:     return;}     在case多的情況下還是很麻煩。考慮這個情況,你需要處理很多命令,對於每個命令都要有一個處理函數。如果要用if..esle來處理未免太麻煩了些。於是想到可以用映射的關係來實現徹底簡化,方法如下:  #include <map>typedef void (*HANDLER)(void* context);typedef std::map<char*, HANDLER> CMDMAP;     首先定義函數指標HANDLER,具體類型可以按照需求更改。然後就是定義map映射關係,CMDMAP就是一個將字串和函數指標聯絡起來的映射。如果有兩個命令處理函數是樣子的: 

void list_handler(void* context){ }

void quit_handler(void* context){ }

    那麼你就可以為你的CMDMAP類型執行個體中添加映射:    CMDMAP mapCmd;    mapCmd["LIST"] = list_handler();    mapCmd["QUIT"] = quit_handler();        這樣子就可以在必要的地方根據命令字串來調用list_handler或者quit_handler了。假設命令字串是cmd,這樣就能調用了:    mapCmd[cmd]();    大功告成!    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.