草庐IT

c++ - 如何处理 Boost.Spirit 生成的警告?

我最近安装了boost,并且正在试验Spirit库。我编译了一个简单的例子,它解析一个逗号分隔的数字列表并将它们加在一起。该程序已编译,但我的编译器(VS2013)发出了大量警告。查看源代码:#include#include#include#include#include#include#include#include#include#includenamespaceqi=boost::spirit::qi;namespaceascii=boost::spirit::ascii;namespacephoenix=boost::phoenix;usingqi::double_;using

c++ - 用 g++/bison/boost::variant 编写的解析器编译速度很慢

我用bison编写了一个verilog解析器,并使用boost::variant来存储每个规则的每个变体的所有不同情况。我用一个小例子,BNF表达式规则,来展示我的数据结构:expression:primary|expression+expressionprimary:(expression)|number存储它的数据结构是:typedefboost::variant,std::shared_ptr,>expressiontypedefboost::variant,std::shared_ptr,>primary类exp1/2和prim1/2用于存储expression和primary

c++ - boost spirit : Difference between operators "%=" and "="

我不明白这两个运算符之间的区别。让我们举一个例子,将像"AA,BB,CC,DD"这样的输入解析成字符串vector。namespaceqi=boost::spirit::qi;classmy_grammar:publicqi::grammar{public:my_grammar():base_type(start){usingqi::_1;usingqi::char_;start=*(char_-qi::lit(','));}qi::rulestart;};据我所知,a%=b等同于a=b[_val=_1]。这很清楚。但另一方面,解析器*(char_-qi::lit(','))具有std

c++ - boost::shared_ptr<string> 标准集

我有一组boost::shared_ptr,我希望它不是通过共享指针而是通过字符串来排序和唯一化的。我是否必须提供一个新的比较函数来获取共享指针并比较内容,或者已经存在我可以使用的比较器? 最佳答案 这非常具体,因此您可能需要一个自定义比较器。这应该有效:structpointercompare{booloperator()(constboost::shared_ptr&a,constboost::shared_ptr&b){return(*a)>(*b);}} 关于c++-boost:

c++ - 将 variant、vector<variant> 和 vector<vector<variant>> 转换为我选择的等效类型

我的问题涉及boost::variant转换与C++中的std::vector的混合。在我的项目中,我使用变体作为SQL的输出。我将始终只使用一种类型的变体。我想要做的是从变量、变量vector或变量的2xvector到我选择的等效类型的简单转换。天真地,我需要一些类似的东西:std::vectormy_variable=convert(some_variant_vector)首先这是我的设置:#include"boost\variant.hpp"#include"boost\date_time\gregorian\gregorian.hpp"typedefboost::variant

c++ - 将 constexpr 结构转换为运行时结构

我正在尝试使用模板类(此处为Foo),其基本类型如下:hana::tuple,Runtime>>与Runtime一个显然不能是constepxr的类.但是类型可以用多种方式构造,这就是我使用的原因:hana::tuple,hana::type>>在编译时完成工作。所以问题基本上是如何从第一个元组类型转换为第二个元组类型。不知hana里面有没有东西那可以帮助我。或者更好的是,关于这种“转换”的一些技巧。namespacehana=boost::hana;usingnamespacehana::literals;structRuntime{std::vectordata;};templat

c++ - 在 C++14 中使用 hana::transform 转换元组内部的类型

我正在尝试使用Boost的hana::transform更改hana::tuple中的类型.例如,假设我有constexprautosome_tuple=hana::tuple_t;我想生产constexprautotransformed_tuple=hana::tuple_t,std::vector,std::vector>;尝试1解决方案对我来说似乎很简单:使用hana::transform并使应用函数返回hana::type_c>.但是,我无法完成这项工作:constexprautotransformed_tuple=hana::transform(some_tuple,[](a

c++ - 来自 Voronoi 的 Delaunay boost : missing triangle with non-integral point coordinates

遵循这两个资源:BoostbasictutorialSOQuestion我用boost写了一个Delaunay三角剖分。如果点坐标是完整的(我生成了几个随机测试并且我没有观察到错误),它工作正常。但是,如果这些点不是整数,我会发现许多不正确的三角剖分缺少边缘或错误的边缘。例如这张图片是用四舍五入的值构建的并且是正确的(见下面的代码)但是这个图像是用原始值构建的并且是不正确的(见下面的代码)这段代码重现了这两个例子(没有显示)。#includeusingboost::polygon::voronoi_builder;usingboost::polygon::voronoi_diagram

c++ - 如何在 boost::spirit::qi 中将某些语义 Action 排除在 AST 之外

我尝试使用boost::spirit::qi解析大量文件。解析不是问题,但有些文件包含我想跳过的噪音。构建一个简单的解析器(不使用boost::spirit::qi)验证我可以通过跳过行首不匹配规则的任何内容来避免噪音。因此,我正在寻找一种方法来编写基于行的解析器,在不匹配任何规则时跳过行。下面的示例允许语法在完全不匹配的情况下跳过行,但是“垃圾”规则仍然插入一个空的V()实例,这是不需要的行为。在示例中使用\r而不是\n是有意的,因为我在文件中同时遇到了\n、\r和\r\n。#include#include#include#include#include#include#includ

c++ - C/C++ 结构枚举

假设我有一个像这样的结构或类似的类(C++):structstr{inta=5;charb='x';};有没有办法枚举它的成员。我想找到成员的名字、值,如果可能的话还有数据类型。我的目的是构建一个配置文件。所以我基本上必须以某种方式表示命令包结构。当实际数据到来时,我想将数据包与此配置文件进行比较,然后进行处理。所以有不同的命令类型。因此,每次数据包到来时,我都必须获取其操作码并使用结构名称对其进行检查,然后返回代表该数据包格式的适当结构。我的想法是用结构来表示命令包格式。如果你能推荐其他数据结构来保存这个,那么也可以。语言可以是C或C++。性能是重中之重,因此不鼓励使用xml和类似类