strUCt Socket { // base class virtual void OnRecv(); }; stuct MySocket { // your event-handle class virtual void OnRecv() { /* do sth here ... */ } } 疑問:很多時候這樣做實在很煩,非凡是做小程序的時候,或者需要快速做原型的時候,一眼望去小小的程序一上來就繼續了一大堆東西,頗為不爽。只是想著能省事一點,希望能像那些腳本語言一樣快速綁定消息響應,而不是以繼續開始工作——我已經害怕看到長長的類繼續樹了,很多時候根本不必要繼續整個類;又或者某些類只提供一個接口而不是具體的類又或者需要多重繼續,處理都有一定麻煩;最麻煩的莫過于有時候需要改變響應處理,難道繼續好幾個下來么——這么多虛表也是浪費啊。
點評:用signal的辦法確實可以方便地動態替換處理函數,不過這是以每個可能被處理的消息都要在每個對象中占用一個 signal 的空間為代價的。而且,需要動態改變處理函數的應用我已經不記得什么時候見過了。即使有,也可以通過在override的virtual函數里自己處理實現,雖說麻煩,但也是可能的。此外,以上代碼并不夠規范,下劃線加大寫字母開頭的標識符是保留給語言的實現用的。