strUCt Socket { // base class virtual void OnRecv(); }; stuct MySocket { // your event-handle class virtual void OnRecv() { /* do sth here ... */ } } 疑问:很多时候这样做实在很烦,非凡是做小程序的时候,或者需要快速做原型的时候,一眼望去小小的程序一上来就继续了一大堆东西,颇为不爽。只是想着能省事一点,希望能像那些脚本语言一样快速绑定消息响应,而不是以继续开始工作——我已经害怕看到长长的类继续树了,很多时候根本不必要继续整个类;又或者某些类只提供一个接口而不是具体的类又或者需要多重继续,处理都有一定麻烦;最麻烦的莫过于有时候需要改变响应处理,难道继续好几个下来么——这么多虚表也是浪费啊。
点评:用signal的办法确实可以方便地动态替换处理函数,不过这是以每个可能被处理的消息都要在每个对象中占用一个 signal 的空间为代价的。而且,需要动态改变处理函数的应用我已经不记得什么时候见过了。即使有,也可以通过在override的virtual函数里自己处理实现,虽说麻烦,但也是可能的。此外,以上代码并不够规范,下划线加大写字母开头的标识符是保留给语言的实现用的。