问题标签 [boost-spirit-karma]

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 投票
1 回答
723 浏览

c++ - 与自动发电机相关的 Boost-spirit-karma 和 boost-variant “概念”

我需要std::vector<boost::variant<..>>用其他对象提供的装饰反序列化 a 。

“装饰”启用的一件事是向量中的一个空条目。我在实际实施中遇到了障碍。但是,我设法将其收缩包装。编译的代码:

有问题的更改试图实现“未定义”类型以及所需的概念。

如果我注释掉这karma::generate一步,std::cout是一个有效的表达式(Boost::variant OutputStreamable)。Spirit 要求为生成器提供OutputStreamable(spirit::karma OutputStreamable) 类型,并且上面的变体应该是OutputStreamable,因为我已将该undefined类型OutputStreamable设置为无操作。

是什么赋予了 ?:(

当使用具有> 2级模板间接的库时,我真的开始质疑 C++ 模板机制是否值得。也许我应该回到直接-c。

编辑1:

好的,Clang 给了我一个合理的first错误......

error: no type named 'properties' in 'boost::spirit::karma::no_auto_mapping_exists'

现在我必须弄清楚如何将 undefined 映射为无操作以获得干净的转换。这个精神文档条目(特别是这个)描述了我需要研究的内容。是否存在由 Spirit 提供的通用未定义类型或在 boost 中定义的类型,该 Spirit 已经映射为 no-op ?

编辑2:

std::vector<boost::optional<boost::variant<..>>>开始看起来很有吸引力,因为精神为他们提供了类型推断。

0 投票
1 回答
537 浏览

c++ - 使用业力生成器避免属性副本

我正在使用karma来生成大型结构的表示,但是在生成过程中会复制这些结构。我认为他们不需要,所以想知道如何避免它。

下面的快速示例打印“复制!”,因为目标结构被复制到rule::generate

foo_rule我可以通过引用声明的属性来停止复制:

但这不适用于向量 [显然foos 因此是可复制的,但在向量构造时复制可能很便宜,但在生成时复制成本高:-)]

下面的示例打印“复制!” 生成期间五次(即在向量 ctor 期间忽略副本);10 次 iffoo_rule的属性不是参考:

在 VC 2008 上使用 Boost 1.47 无法编译这两个规则的引用。也就是说,使用:

我用andextract_from_container实例化。在 extract_from.hpp 的第 131 行,它尝试形成并且编译器在创建 refrence-to-reference 时失败。Attribute = std::vector<foo>Exposed=std::vector<foo> &Exposed const &

我觉得我错过了一些东西,所以任何指针将不胜感激!

0 投票
1 回答
364 浏览

c++ - 使用 Spirit::karma 从元组向量重新排序元组

在规则数据(例如)中,我需要在double之前生成int并使用它进行算术运算。如何在数据规则的语义操作中访问合成属性(元组)的元素?

0 投票
1 回答
415 浏览

c++ - Semantic actor with boost::spirit::karma::lit

Help me please find a solution to a seeming simple problem. I need generate a string from a container in a form index=value.

For example:

seq = { 10, 20, 30 } output = "1=10&2=20&3=30"

But I found no way to do so with the boost::spirit::karma without writing a custom gererator. For some reasons it's impossible to use a semantic action with karma::lit. Maybe I missed something?

At compilation I get the following error:

0 投票
1 回答
587 浏览

c++ - 使用 karma 为指针向量生成输出

我在使用 karma 为保存在 boost::shared_ptrs 向量中的结构生成输出时遇到了一些麻烦。我有一个使用无法编译的整数的小测试用例。我在想我可以使用 deref_iterator 自定义点来处理这种情况,或者开箱即用的精神可能会注意到我的容器持有指针类型并执行额外的取消引用。无论如何,这是测试用例:

这是编译错误:

0 投票
1 回答
752 浏览

c++ - boost::spirit::karma 使用带有条件的替代运算符 (|)

我正在尝试从我自己的名为Valueusing的类中生成一个字符串boost::spirit::karma,但我遇到了这个问题。我试图将我的问题提取到一个简单的例子中。

我想从以下类的实例生成一个带有业力的字符串:

在这里你可以看到我要做的事情:

第一次调用karma::generate()工作正常,因为该值是一个布尔值,并且我的规则中的第一个生成器也“消耗”了一个布尔值。但是第二个karma::generate()失败了,boost::bad_get因为 karma 试图吃一个 bool 并因此调用Value::operator bool()

我的下一个想法是修改我的生成器规则并将eps()生成器与条件一起使用,但在这里我卡住了:

我无法用 sth 填充 eps 生成器的括号。像这样(当然不工作):

我试图进入boost::phoenix,但我的大脑似乎还没有为这样的事情做好准备。

请帮我!

这是我的完整示例(编译但不工作): main.cpp

0 投票
1 回答
210 浏览

c++ - boost::spirit::karma 语义动作分配错误

我正在尝试通过语义操作设置业力生成器值,但是它不会编译。我找不到原因,因为我很确定我按照文档中的说明使用它。由于我是业力新手,因此很可能我犯了一些新手错误。一个最小的例子:

导致编译器错误:

我正在使用 g++ 4.6.3 和 boost 1.48。

0 投票
1 回答
1014 浏览

c++ - 提升基于职业输入的精神业力生成

嗨,我想要的是根据我传递给生成器的内容生成一些文本,例如

...然后调用类似的东西

我什至不确定我是否使用了正确的生成器,但它说惰性能够从属性中的内容转换为返回内部函子的内容

0 投票
1 回答
169 浏览

c++ - boost::spirit::karma: 使用 no_delimit 和替代方案

我正在尝试关闭包含替代运算符 ('|') 的规则的定界,但我收到有关不兼容定界符的编译错误。举个例子,我取了 boost 中的 calc2_ast_dump.cpp 例子,并将 struct dump_ast 中的 ast_node 规则修改为:

但这会产生编译错误:

以及 boost/spirit/home/karma/nonterminal/rule.hpp 中的相关评论:

在我自己的项目中,我可以毫无问题地执行“no_delimit[a << b]”(使用 karma::space 分隔符)。

我对替代品有什么遗漏吗?为什么 no_delimit 可以使用 '<<' 而不是 '|'?

我使用的是 boost 1.48,所以我需要修复错误吗?

0 投票
1 回答
381 浏览

c++ - Boost Spirit Karma 多种选择

我看到一个我没有看到解决方案的错误。一、相关代码:

在这range %=部分,我得到编译错误

我猜它正在尝试将 RangeEntry 与 ulong_ 规则匹配,但我不知道为什么?我错过了什么?