C++ 是否可以使用boost spirit直接解析到嵌套的豆荚?
我的任务是用一些复杂的数据调用C API函数,这些数据是通过网络以文本形式出现的。人们可能会想到某种形式的RPC。函数调用非常频繁,因此性能要求非常严格。目前,我使用手动编写的解析器直接将输入流解析为相应的POD结构。问题是这个解析器非常庞大。是的,有时我会在里面发现虫子。我想尝试切换到boost,以降低代码的复杂性。希望我也能提高性能,以防使用内存池。在当前的解决方案中,考虑到所有这些都是多线程的,增加这样的复杂性看起来令人望而生畏 简化的输入数据看起来像C++ 是否可以使用boost spirit直接解析到嵌套的豆荚?,c++,parsing,boost,boost-spirit,C++,Parsing,Boost,Boost Spirit,我的任务是用一些复杂的数据调用C API函数,这些数据是通过网络以文本形式出现的。人们可能会想到某种形式的RPC。函数调用非常频繁,因此性能要求非常严格。目前,我使用手动编写的解析器直接将输入流解析为相应的POD结构。问题是这个解析器非常庞大。是的,有时我会在里面发现虫子。我想尝试切换到boost,以降低代码的复杂性。希望我也能提高性能,以防使用内存池。在当前的解决方案中,考虑到所有这些都是多线程的,增加这样的复杂性看起来令人望而生畏 简化的输入数据看起来像函数名({x,x,x,{x,x},x}
函数名({x,x,x,{x,x},x})
,其中每个x
都是某种类型的原语值或文本字符串(表示为“blah”
或
)。每个缺少的结构都由
表示
输出数据为POD结构。如果是字符串或嵌套结构作为字段,则指向所分配数据的指针存储在外部数据中。如果缺少值,则可以为null
翻阅SO答案和boost文档,我无法找到如何高效地完成这项任务,也就是说,在将结构解析为某种内部“boost友好”形式后,不将其重建为POD
因此,再次重复这个主题,问题是如何解析具有指针的嵌套POD结构
任何帮助都可以理解。
< P>根据所陈述的目标,我会考虑Boost系列化(或者可选地在共享内存中)从Boost进程中。 推进序列化 与和一起使用- (哪些链接和)
- 为了一个奇特的应用
其他很多,取决于你想达到的目的。
我已经实现了类似的功能一次-为了数据序列化(我想把C++对象保存到一个文件,然后再载入它们)。加上对补丁(代码版本控制)的支持,产生了一个小模块,但并不是很大。但是我用纯C++来实现……发布一些你认为应该做你想做的代码。您将需要保留一个“全局”上下文对象,记录对象以前是否见过。您可能想看一看,作者是Kenton Varda,他以前在Google Protobuf上工作过。使用别人为您维护的现有解决方案有很多话要说:)谢谢您的回答。这是否意味着boost::spirit无法完成任务?当然不是。我只是碰巧同意大多数人的看法,这不值得为他们做管道工程。我曾经使用Spirit解析JSON序列化(一般地),使用复杂的机制来进行“反射”和OData注释,但我真的认为不值得这么麻烦。使用图书馆。Protobuf,Cap'n proto,谷类食品,Boost系列化等等(附言,如果你可能认为我不是一个粉丝,只要看看:)