我将Boost版本从1.6.1切换到> = 1.6.2并且我的boost::spirit解析器代码无法编译。 实际上,我认为这个问题与Boost Variant中从版本1.6.1到版本1.6.2的错误修复有关。 版本1.6.2的发行说明说: Variant constructo ...
我将Boost版本从1.6.1切换到> = 1.6.2并且我的boost::spirit解析器代码无法编译。 实际上,我认为这个问题与Boost Variant中从版本1.6.1到版本1.6.2的错误修复有关。 版本1.6.2的发行说明说: Variant constructo ...
我想将非原型类的实例用作所有用途的原型终端。 为了启用此功能,我使用is_terminal元函数并将其传递给BOOST_PROTO_DEFINE_OPERATORS() 。 这实际上定义了运算符,因此以下表达式按预期生成了一个表达式树: 但是,我不能这样做: 而相反的编译: 似乎我的对 ...
在测试聚合类型时,我尝试使用boost :: proto :: is_aggregate来检查我正在创建的类型是否真正聚合。 我写了这段代码: 我期望输出为真,因为聚合类型可以定义一个复制赋值运算符(根据这个: 什么是聚合和POD以及它们如何/为什么特殊? ) 但输出是错误的。 ...
现在我正在尝试教g ++编译器线性代数,以便g ++可以重写像(matrix * vector)(index)这样的表达式作为评估表达式的循环。 基本上这是我期望的作为“ 表达式C ++ ”系列文章的最后一篇文章的下一篇文章 。 最后一篇文章解释了如何制作用于添加向量的EDSL,以便我编写另 ...
对于提出这样一个开放式问题的道歉,但我想在C ++中模拟一些合成程序集(不是真正的处理器),我想将程序集与它运行的模拟器的实现分离。 编写DSL或类似的东西似乎是显而易见的方式,我有一些经验,在Groovy中做了类似的事情(实际上是DSL和解释器之间的混合)。 boost :: pr ...
我想生成从子级到父级具有“反向”引用的表达式树。 有没有办法自定义Proto生成器或域,以便表达式包装类(使用proto::extends<> )包含对父表达式的引用? 这背后的目标是创建缓存评估结果的表达式树,以便可以有效地重新评估它们。 我的策略是更新终端值,然后将标记 ...
现在,我正在尝试制作另一种用于向量表达式的微型EDSL(嵌入式领域特定语言)。 实际上,Boost.Proto用户指南已经提供了这样的EDSL示例“ 惰性向量 ”,其中向量表达式由std::vector<T> 。 但是我必须改用原始数组的那些表达式。 因为原始数组操作仍然是一些 ...
我有一个在库上下文中提供的函数foo() 。 该库为此函数定义了一些重载,如: (我做了上面的参数/结果类型。要点是参数类型和重载的相应返回类型之间没有通用关系。) 这个想法是库用户可以根据需要为他们自己的用户定义类型添加foo()重载。 函数重载非常容易实现。 我想使f ...
为了使自己熟悉Boost.Proto,我尝试通过改编用户指南中的TArray示例,为固定大小但任意大小的浮点向量构建另一个表达式模板库。 我要做的第一件事是定义向量类: vector_expr_wrapper也会重载其operator[]以使用从proto::callable_cont ...
是否可以提取Boost.Proto表达式树的各个部分,分别(外部)对其进行求值,然后对表达式树进行变异,将提取的部分替换为结果? 在我的特定情况下,我正在尝试评估是否可以重复重写一些旧代码: 生成SQL 查询数据库 使用结果生成新的sql查询 再次查询数据 ...
我想使用Boost.Proto将嵌入式领域特定语言转换为使用Eigen库实现的一系列矩阵运算。 由于效率很重要,我希望proto生成特征表达模板并避免过早评估。 我已经实现了一个可以生成矩阵乘法表达式的简单语法。 下面的代码编译时没有警告(在g ++ 4.8.0和Intel C ++ ...
如何获取范围内Boost Phoenix语句中使用的局部变量类型? 使用Phoenix和Proto我可以提取Phoenix表达的许多方面。 例如,以下代码公开了arity(3); 标签类型(lambda_actor); 和Phoenix lambda表达式的child-2标记类型(shi ...
在一个Boost Proto表达式中,我什么时候不应该期待一个proto_tag成员? 我可以使用以下任一方法查询占位符的标记类型: 但是,如果我问一个表达式的孩子的标签类型,似乎缺少proto_tag成员; 并且以下代码的第三行给出了错误: Clang和GCC的错误报告了所 ...
当“内部”局部变量隐藏“外部”局部变量时,我在Boost Phoenix中遇到嵌套let块的问题。 即使使用此处文档中的“可见性”示例, 此处显示: 我收到错误开头: 有没有人知道我怎么能在凤凰城内部let块的范围内“遮蔽”这样一个变量? 我目前正在使用带有GCC版本4.8快 ...
我想建立在升压原“开箱表达式”例如,从这里通过使用模板参数指定的返回类型do_eval变换(迄今double )。 为简洁起见,我将提供一个有效的,简化的(仅限加)版本的do_eval : 然后我添加模板参数T而不是double : 并将关联的eval结构修改为: ...
我可以将Boost Phoenix表达式转换为代表性的C ++字符串吗? 我本可以有: 然后可能会生成一个包含以下内容的字符串: 我很欣赏这个例子有一些粗糙的边缘,但我想知道这些线路是否有任何尝试? ...
如何在Boost Phoenix表达式的转换中包含函数体? 例如,我构建了Boost Phoenix Starter Kit的Lazy Functions部分,并创建了一个延迟添加函数: 然后,我从前一个问题准备一个简单的加号 - 减号变换,如下所示: 但是,当我将一个倒置 ...
按照Proto用户指南的表达式作为融合序列部分,我到达了迭代一个展平的proto表达式的点: _1 + 2 + 3 + 4 : 使用proto::terminal定义_1占位符如上所示。 我也想使用Boost Phoenix; 但是,如果我在调用fusion::for_each使用b ...
在Boost Phoenix文章“转换表达式树”中, 这里 ,一组自定义invert_actions类的特化用于反转二进制算术表达式。 例如a+b变为ab ; a*b变为a/b ; 反之亦然。 这涉及表达式树的递归遍历 - 但是,当遇到涉及未明确处理的运算符的表达式时,此遍历将停 ...
我正在尝试原型和凤凰,我的第一个玩具示例是什么崩溃,我不知道我应该在哪里看。 由于#boost IRC频道上有人告诉我要确保首先对凤凰表达树进行深度复制(因此在构造x时没有留下悬空引用),我将表达式包裹在boost::proto::deep_copy 。 然而,这并没有奏效 。 使用-O2 ...