问题标签 [boost-fusion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1014 浏览

c++ - 如何转换 std::vector成为 boost::spirit 中结构的成员?

我有一块 Spirit 代码,通过用作主要属性,可以正确解析std::string input = "RED.MAGIC( 1, 2, 3 )[9].GREEN"为 simple 。std::vector<std::string>std::vector<std::string>

我想将 替换为包含 astd::vector<std::string>的结构,但如果可能的话,继续使用自动生成器。my_recstd::vector<std::string>

当我用 编译时-DUSE_MY_REC,我得到了一堵难以理解的编译错误墙。

示例编译并运行

沙盒.cpp

0 投票
1 回答
574 浏览

c++ - 使用 boost::spirit 时无法在 boost::variant 中转换 boost::fusion 结构

一天中的好时光!

我写了这段代码,并希望它能够被编译。

但是当我用 clang 或 GCC 编译它时,我得到一个错误。其中最有趣的部分是:

我使用 clang 3.1 或 gcc 4.7 和 boost 1.52,但我认为没关系。:)

我应该如何编辑这段代码以使其被编译?

更新

好吧,我刚刚注意到我指定的语法是左递归的,因此递归下降解析器在处理输入时可能不会停止。这可能是编译问题的原因吗?

0 投票
2 回答
460 浏览

c++ - 施放 boost::fusion::vector

boost::fusion::vector 的编号形式看起来像

等等

可变参数形式看起来像

那么有没有办法在编译时将 boost::fusion::vector 从编号形式转换为可变参数形式?

0 投票
1 回答
207 浏览

stl - D std lib 是否包含诸如 boost.fusion 和 boost.mpl 之类的东西?

我仍在评估是否应该开始使用 D 来制作物理数字代码的原型。

阻止我的一件事是我喜欢 boost,特别是 fusion 和 mpl。

D 非常适合模板元编程,我认为它可以做 mpl 和 fusion 的东西,但我想确定一下。

即使我将开始使用 d,我也需要一段时间才能达到 mpl 级别。所以我希望有人分享他们的经验。

(通过 mpl 我的意思是将 stl 用于模板,通过融合,我的意思是 stl 用于元组。)

关于性能的注释也很好,因为它在物理模拟中至关重要。

0 投票
2 回答
740 浏览

c++ - 使用元组和 boost.fusion,有什么理由使用结构吗?

元组类似于结构(这里讨论:Boost::Tuples vs Structs for return values)。似乎唯一的优点是编写 struct 更方便,因为它更短且通过键而不是数字。

还可以使用 fusion map 和 structs 通过键Boost::Tuples vs Structs 访问返回值来模拟结构。这是一个多一点的写作。

似乎也没有性能损失。好吧,融合可能会更快,因为它使用视图。

所以使用结构的唯一原因是如果您不想再编写几行代码并保持代码可读性?

0 投票
1 回答
543 浏览

c++ - 添加对 boost::fusion::vector 的引用

我想创建一个引用变量的提升融合向量。目标是将不同数量的参数传递给函数并将它们添加到融合向量中。由于引用类型,我使用 TMP 一次添加每个元素。但有时融合向量中的某些元素是错误的。这似乎是未定义的行为(错误的值,读取访问冲突)。
我写了一个示例,在其中我“展开”了 TMP 中使用的递归以便于理解。它只是简单地添加两个对融合向量的引用并输出结果:

当访问 boost fusion 向量中的引用(读取访问冲突)时,程序崩溃,首先在此行:

我使用 VC11 作为编译器(版本 17.00.51106.1)。该错误仅在发布模式下。但是当我使用 VC10、GCC 4.7.0 或 GCC 4.7.2 时,没有错误,程序运行良好。
要让程序与 VC11 一起工作,我必须更改这一行

那么,上面的示例是否包含错误或 VC11 优化器有问题?是否允许将本地 boost 融合视图(boost::fusion::join 仅返回一个视图,并且该视图通过 boost::fusion::vector 转换为“正常” boost::fusion::vector)到另一个按价值运作?

0 投票
1 回答
728 浏览

c++ - 提升精神语义动作和融合数据类型

我有一条规则应该返回一个 Boost.Fusion ASSOC_STRUCT。我正在尝试将规则解析器解析的结果分配给 _val,但我无法使其工作。我将跳过谈话,直接向您展示相关代码。

(使用 g++ above_file.cpp -std=c++0x 编译)我的实际应用程序中的编译器错误与此示例中的有些不同,但类似于(在 _val = ActionLine{0, _1, _2} 的行中) : 没有调用::ActionLine::ActionLine()的匹配函数,我猜它不能将_1和_2转换为int。

我还尝试添加本地 int 变量并使用它们来复制解析的值,但它不起作用,没有使用 boost::phoenix::at(_1,0), boost::phoenix::at(_1,1 )(我发现这些想法在这里提升了精神语义动作参数

0 投票
2 回答
851 浏览

c++ - 混合运行时/编译时条件下的标记调度

我有以下标签调度代码(参见LiveWorkSpace

但是,这个标签调度与函数密切相关fun,我需要维护 3 个辅助函数来为每个使用它的函数实现这个标签调度。

参数推导失败:我试图将 抽象fun_impl为函数对象的模板参数mixed_dispatch,但如果我随后作为参数传递fun_impl,则无法推断出应该需要 2 个重载中的哪一个。

问题:有没有其他方法可以将标签调度与被调用的函数分离?

我愿意接受任何使用 C++11 可变参数模板 / Boost.Fusion 或其他简化我当前代码的魔法的建议(我现在必须为使用此特定调度的每个函数维护 3 个而不是 2 个辅助函数,并且还有更多复杂的分派帮助函数的数量增长得更快)。

0 投票
1 回答
1039 浏览

c++ - boost::phoenix::insert 的评估结果

我在尝试评估boost::phoenix::insert将元素插入地图的结果时遇到了困难。与常规std::map::insert返回的actor对象类似,它boost::phoenix::insert也返回一个std::pair<Iterator where, bool result>. 我对该对的第二个元素感兴趣,以检查插入是否成功。说明该问题的大量条带化代码示例如下:

使用 MSVC2012 和 boost 1.53 时出现以下错误:

clang3.2报同样的错误:

我即将用完如何正确评估插入结果的想法。任何帮助,将不胜感激。

编辑:我的问题的更广泛背景是我正在尝试使用 boost::spirit::qi 解析类似 C++ 的枚举。我发现的任何尝试实现相同目的的示例都不会检查重复的枚举成员。这里有两个相关规则的代码片段:

0 投票
3 回答
2834 浏览

c++ - 将 boost::fusion::for_each 应用于带有可变函数对象的 boost::fusion::vector

我正在尝试使用 boost::fusion::vector。但是,我遇到了一个非常简单的问题。

请注意,operator()ofstruct A修改xstruct A。gcc 4.7.2 警告 ...\include\boost\fusion\algorithm\iteration\detail\for_each.hpp:77: 错误:将 'const A' 作为 'void A::operator()( const T&) [with T = int]' 丢弃限定符 [-fpermissive]

有解决方案吗?