【发布时间】:2011-07-29 12:52:03
【问题描述】:
我正在编写一个与专有协议接口的服务器。 目前大部分代码由解析数据包的所有字段的数据包处理程序组成,同时确保可用数据的大小至少是每个字段之后的最小剩余大小。除此之外,数据包处理程序还对接收到的数据进行有效性检查(即必须在某个范围内,或者在一组预定义的值中)。
当然,当您将它与数据包的实际逻辑处理结合起来时,这是很多样板代码,所以我想自动生成解析器并在完全解析的结构上调用处理程序。
现在我看到了两种可以采取的方法:
想出一些元编程框架,让我能够描述数据包结构和最终的数据验证规则,这样我就可以在编译时生成解析代码。我想这与 Boost.Spirit 的意图相似。
编写我自己的数据描述语言和一个可以从中生成 C++ 代码的外部工具。看起来不太难,但肯定会弄乱构建过程,而且我通常不喜欢使用大量工具生成的代码。此外,这也不允许在源代码本身内快速更改数据描述。
元编程方式在理论上似乎更胜一筹,但我还没有想出完美的实现方式。最好声明数据包类似于声明一个类,并且不会充满宏。在我必须引用以前的数据成员的情况下也会出现问题(对于重复可变次数的字段就是这种情况,其中计数是在数据包的前面指定的)。
有没有人有类似框架的经验,你有什么建议?
我知道 Google 协议缓冲区,但它具有侵入性,因为它需要控制协议。
【问题讨论】:
标签: c++ parsing code-generation metaprogramming struct