QuickFix能够发送包含重复甚至是递归重复组的消息。所以重复组将以一个暗示有多少个重复组的field开始。
这里有一个分发市场数据的消息。当这个消息被创建,重复组的数量为0.当你加这个组的时候,QuickFIX 将自动为你设置这个field。这种方法不会在field入口数目和消息间产生不一致。
// create a market data message
FIX42::MarketDataSnapshotFullRefresh message(FIX::Symbol("QF"));
// repeating group in the form of MessageName::NoField
FIX42::MarketDataSnapshotFullRefresh::NoMDEntries group;
group.set(FIX::MDEntryType('0'));
group.set(FIX::MDEntryPx(12.32));
group.set(FIX::MDEntrySize(100));
group.set(FIX::OrderID("ORDERID"));
message.addGroup(group);
// no need to create a new group class if we are reusing the fields
group.set(FIX::MDEntryType('1'));
group.set(FIX::MDEntryPx(12.32));
group.set(FIX::MDEntrySize(100));
group.set(FIX::OrderID("ORDERID"));
message.addGroup(group);
从消息中拉出一个group,你需要提供你想要拉出的group。你应该首先检测entries field的数字来得到组的总个数。
// should be 2
FIX::NoMDEntries noMDEntries;
message.get(noMDEntries);
FIX42::MarketDataSnapshotFullRefresh::NoMDEntries group;
FIX::MDEntryType MDEntryType;
FIX::MDEntryPx MDEntryPx;
FIX::MDEntrySize MDEntrySize;
FIX::OrderID orderID;
message.getGroup(1, group);
group.get(MDEntryType);
group.get(MDEntryPx);
group.get(MDEntrySize);
group.get(orderID);
message.getGroup(2, group);
group.get(MDEntryType);
group.get(MDEntryPx);
group.get(MDEntrySize);
group.get(orderID);