我希望能够在XML中指定客户端服务器协议中不同数据包的布局,并在编译时(或之前)解析XML并生成C ++代码以解析定义的布局。 / p>
示例:
<layout>
<opcode id=1>
<field type=uint32 label="itemId" />
<field type=uint8 label="count" />
<field type=strlen32 label="name" />
</opcode>
</layout>
错误的XML不能承受,并且'strlen32'意味着一个32位长度为内容添加前缀的字符串,在处理时会产生以下处理程序:
void Handle_Opcode1(Packet &packet, std::function<...> emitter)
{
std::uint32_t itemId = packet.Read<std::uint32_t>();
std::uint8_t count = packet.Read<std::uint8_t>();
std::uint32_t nameLen = packet.Read<std::uint32_t>();
std::vector<char> name(static_cast<std::size_t>(nameLen));
packet.Read(&name[0], name.size());
emitter(itemId, count, name);
}
我不确切地知道我希望发射器如何以通用的方式工作,但我认为这超出了这个问题的范围。目前我只是在寻找有关C ++代码生成的建议。有没有现成的工具呢?