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