能否将QuickFIX消息转换为特定类以获得IDE智能提示支持?
方案1:优先使用官方自带的强类型消息类(即你示例中的第一种写法)
这就是官方原生提供的消息与类直接映射的实现方案,完全可以满足你要的IDE提示、类型校验需求:
- 带FIX版本前缀的消息类(如
FIX41::OrderCancelRequest)本身已经按照FIX协议规范,限制了仅能设置该消息支持的合法字段,调用set()方法时如果传入非法字段,编译阶段就会直接报错,比第二种裸写FIX::Message的方式安全很多 - 主流IDE(CLion、Visual Studio等)都支持这类强类型API的参数提示:你输入
message.set(FIX::)时,IDE会自动补全所有当前消息类支持的字段类,不需要硬记字段名 - 这类消息类的构造参数已经默认列出了该消息的所有必填字段,IDE会直接提示你需要传入的参数列表,完全符合你期望的「创建实例时提示必填字段」的需求
- 接收消息场景也可以配套使用强类型回调:你只要在自己的
Application实现类中声明对应强类型消息的onMessage重载(比如void onMessage(const FIX41::OrderCancelRequest&, const FIX::SessionID&)),框架会自动完成消息类型分发,在该重载方法内调用get()方法时,IDE同样会提示所有该消息支持的可读取字段。
方案2:自定义代码生成模板获得更直观的属性式调用体验
如果觉得每次调用set()都要传入字段类实例的写法不够直观,你可以基于QuickFIX自带的代码生成器做二次改造:
QuickFIX的所有消息类、字段类都是根据FIX数据字典的XML文件生成的,你可以修改默认的生成模板,给每个消息类生成对应字段的具象get/set方法,比如给OrderCancelRequest生成setOrigClOrdID()、getOrigClOrdID()这类直接对应字段名的方法,调用时IDE的提示会更清晰,不需要再输入字段类的前缀。
第二种裸写FIX::Message的写法不推荐日常使用,这种方式没有消息级的类型校验,哪怕传入不属于当前消息的字段编译器也不会报错,只有运行时才可能触发异常,完全无法利用IDE的提示能力。
内容的提问来源于stack exchange,提问作者Xaruman
相关产品推荐
相关产品推荐

