今天在浏览mavros代码的过程中,发现了以下的为特定类型数据包的处理函数注册回调的代码

在make_handler内的lambda表达式中,将统一的类型 mavlink_message_t 通过其自己的方式,转换成回调函数定义中的_T类型(_T类型可以从mavlink_message_t数据包中,解析出各种特化的数据包(如解析成mavlink协议中的Attitude数据包,Altitude数据包,都是不同的_T类型,这些_T类型都可以进行deserialize操作,可以方便地从mavlink协议的定义文件生成对应的代码)(不过这里也同样适用于存在继承关系的场合,直接static_cast过去啦))

而 make_handler 函数,通过对于函数指针的模板类型推导,直接获取了这个函数所要处理的数据格式进行绑定,免去了手动输入要绑定的消息类型的麻烦,是函数中的豪杰.

 

PS:这种方式似乎也挺方便与Rx风格的Observable<_T>()共存(转换)的…

PS2:好水好水,过几天做个对模板类型推导的详细说明吧….~

PS3:都12天没更新了!!!<-没救

PS4:封面画师 f7(eiki) …(现在似乎不再使用这种画风了….)(心象幻想乡….)