前段时间在公司实习做了电子显微镜的项目,GUI部分是用C#写的,C#中的委托(delegate)用起来实在是太爽了。委托让模块之间的关联程序大大的降低,可是说几乎能做到不关联。这让有些模块的独立性、通用性和重用能力得到大大的加强。在我的毕业设计所做的程序中,人工智能模块我就是做成了一个可以让别人也能灵活使用的单独的模块。其中有一个重要功能就是接受别人的模块所传入的回调函数,在电脑计算完毕之后,回调这个函数告诉GUI模块电脑所下的是哪一步棋。这个回调函数有两种形式,一种是一般的C语言函数或者类的静态函数,另一种就是对方的函数。前一种设置起来已经的方便,不过往往会带着一个多余的空指针参数,以便使用者可以用这个参数还原自己的类型。这样子看起来真的让人觉得很不舒服,而使用后者的话看起来就自然得多了。可是问题就随之而来了,要用C++实现回调一个未知类型对象函数要怎么实现呢。在C#里就特别的简单,直接用delegate关键字定义一个委托就OK了。那么在C++里要如何实现呢。在这儿我写一下我简单实现这个委托的C++例子代码,当然这个委托很有局限,因为这个参数的个数必须事先就确定了。代码如下: