今天在研究AirSim的代码过程中,发现了以下有趣的代码:

UpdatableObject描述了一个可以被Update,Reset的对象。而在实际的代码中,有许多相关的代码都是可以Update的,不过又不便于通过继承特性来维持一个统一的接口,对于这种情况,一种方法可以把update方法用Bind绑定成为一个Func<>对象然后统一处理,或者也可以像下面一样用一个模板类来做类似的事情。

UpdatableContainer可以将拥有Update,Reset,ReportState方法的TUpdatableObjectPtr对象指针,包装到自己里面,同时对外是一个明确的,与内在对象类型无关的UpdatableObject,供其他模块批量调用。因为是作为模板参数传过去的,在模板匹配过程中(编译时)会检查是否满足条件,也就不必用继承的方式来约束了(编译器:???)(intellisence:???)。

 

顺便一说,这里似乎也是支持update为Func<>变量的情况,这也算是模板的好处之一吧。