问题标签 [boost-variant]

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 回答
981 浏览

c++ - 从访问者更改 boost::variant 基础类型

我有一个模拟 S 表达式的递归变体:

我希望空列表始终由nil(not list<sexpr>) 表示。但是,我坚持执行 push_back() 访问者。当基础类型为nil时,我希望它将该类型更改为list<sexpr>并推回提供的值:

有任何想法吗?

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 回答
131 浏览

c++ - 关于使用 boost::variant 重新加载运算符的编译错误

我正在尝试学习 boost.variant。但是,我从书中复制的代码不会通过编译:

这是我尝试使用它的方式。

编译器生成以下错误:

错误:'i *= 2' 中的 'operator*=' 不匹配

这让我感到困惑,因为模板函数将在调用它时确定参数的类型,并且 int 应该定义运算符 *=。

0 投票
1 回答
1824 浏览

c++ - boost::apply_visitor 不是 [some] 类的成员

我有一个 ShapeType,Point,有一些坐标,(1,2),我想在重载运算符 () 中使用 apply_visitor 将坐标 (3,4) 添加到我的 Point,因此 Point 最终成为(4,6)。我的实施在哪里失败?我认为我的 ShapeVisitor 类是正确的,但我收到一个错误,“apply_visitor”不是 CLARK::Point 的成员。

代码如下。

谢谢!

0 投票
3 回答
181 浏览

c++ - 从模板值获取类型,C++

我有以下使用 boost::variant 的方法。我尝试根据 type 获取值T。如果boost::get<T>失败,如果 T 是 int 或 unsigned int,我想以特殊方式处理它。有什么方法可以知道T是 int 还是 unsigned int?

我认为在这种情况下我不能使用模板专业化,可以吗?

编辑:另外,我还没有访问 C++11(我希望很快)

0 投票
1 回答
1359 浏览

c++ - 使用 boost::spirit 的代码中不明确类型的编译错误

如果我编写此代码,它仍然可以编译:

但是当我将定义更改STreeConstructionRuleOperand

我收到以下编译错误(使用 STLPort 而不是 STL):

这是编译器报告的唯一错误。我没有看到任何歧义,但编译器确实如此。此错误的原因是什么以及应如何修复?

0 投票
1 回答
969 浏览

c++ - Boost::variant 无法解析 std::ostream 的 operator<<

我真的不明白发生了什么。我正在使用 MSVC 2012,Boost 51。这段代码应该可以正常工作,但它没有被编译:

我得到的是:

我不知道什么是 T0 类型以及为什么将其转换为 T0。我希望它是 boost::variant 内部的东西。但是我仍然没有任何线索,为什么我会到达那里:定义了变体中所有类型的运算符“<<”。

0 投票
3 回答
5866 浏览

c++ - 具有多个参数的 boost::static_visitor

是否可以更改访问者以使其接收额外数据,如下所示:

此字符串值在 Append 对象的生命周期内发生变化。在这种情况下,通过构造函数传入字符串不是一种选择。

0 投票
1 回答
157 浏览

c++ - Boost::spirit 错误地处理带有分支的规则

我编写了下面列出的代码。编译器向我报告一个错误:'3 个重载都不能转换所有参数类型'。

我使用 MSVC 11.0 和 Boost 1.51.0。表达式的每个分支都m_oQueryIterationExpression可以正常工作,但它们不能一起工作。有什么线索吗?

0 投票
1 回答
863 浏览

c++ - 将两个变体与 boost static_visitor 进行比较

几天前我开始使用 boost 库,所以我的问题可能是微不足道的。我想将两个相同类型的变体与 static_visitor 进行比较。我尝试了以下,但它不想编译。

感谢您的任何帮助或建议!