C++ 是否可以使用boost spirit直接解析到嵌套的豆荚?

C++ 是否可以使用boost spirit直接解析到嵌套的豆荚?,c++,parsing,boost,boost-spirit,C++,Parsing,Boost,Boost Spirit,我的任务是用一些复杂的数据调用C API函数,这些数据是通过网络以文本形式出现的。人们可能会想到某种形式的RPC。函数调用非常频繁,因此性能要求非常严格。目前,我使用手动编写的解析器直接将输入流解析为相应的POD结构。问题是这个解析器非常庞大。是的,有时我会在里面发现虫子。我想尝试切换到boost,以降低代码的复杂性。希望我也能提高性能,以防使用内存池。在当前的解决方案中,考虑到所有这些都是多线程的,增加这样的复杂性看起来令人望而生畏 简化的输入数据看起来像函数名({x,x,x,{x,x},x}

我的任务是用一些复杂的数据调用C API函数,这些数据是通过网络以文本形式出现的。人们可能会想到某种形式的RPC。函数调用非常频繁,因此性能要求非常严格。目前,我使用手动编写的解析器直接将输入流解析为相应的POD结构。问题是这个解析器非常庞大。是的,有时我会在里面发现虫子。我想尝试切换到boost,以降低代码的复杂性。希望我也能提高性能,以防使用内存池。在当前的解决方案中,考虑到所有这些都是多线程的,增加这样的复杂性看起来令人望而生畏

简化的输入数据看起来像
函数名({x,x,x,{x,x},x})
,其中每个
x
都是某种类型的原语值或文本字符串(表示为
“blah”
)。每个缺少的结构都由
表示

输出数据为POD结构。如果是字符串或嵌套结构作为字段,则指向所分配数据的指针存储在外部数据中。如果缺少值,则可以为null

翻阅SO答案和boost文档,我无法找到如何高效地完成这项任务,也就是说,在将结构解析为某种内部“boost友好”形式后,不将其重建为POD

因此,再次重复这个主题,问题是如何解析具有指针的嵌套POD结构


任何帮助都可以理解。

< P>根据所陈述的目标,我会考虑Boost系列化(或者可选地在共享内存中)从Boost进程中。

推进序列化 与和一起使用

  • (哪些链接和)
Boost进程间 如果对象图是“复杂的”(例如,可能包含多索引容器,或可能使用共享对象表示进行压缩的相关非POD),则这一点会很明显。这有点复杂,但使您在托管缓冲区(使用标准分配器)中执行的任何操作都可以按位序列化

这里没有可移植格式:库是可移植的,但在一个平台/版本上序列化的数据不能在另一个平台/版本上读取

见例

  • 为了一个奇特的应用

其他很多,取决于你想达到的目的。

我已经实现了类似的功能一次-为了数据序列化(我想把C++对象保存到一个文件,然后再载入它们)。加上对补丁(代码版本控制)的支持,产生了一个小模块,但并不是很大。但是我用纯C++来实现……发布一些你认为应该做你想做的代码。您将需要保留一个“全局”上下文对象,记录对象以前是否见过。您可能想看一看,作者是Kenton Varda,他以前在Google Protobuf上工作过。使用别人为您维护的现有解决方案有很多话要说:)谢谢您的回答。这是否意味着boost::spirit无法完成任务?当然不是。我只是碰巧同意大多数人的看法,这不值得为他们做管道工程。我曾经使用Spirit解析JSON序列化(一般地),使用复杂的机制来进行“反射”和OData注释,但我真的认为不值得这么麻烦。使用图书馆。Protobuf,Cap'n proto,谷类食品,Boost系列化等等(附言,如果你可能认为我不是一个粉丝,只要看看:)