问题标签 [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 回答
271 浏览

c++ - 字符串布尔比较 - 为什么?

boost::variant<int,std::string,bool>当我遇到意外行为时,我正在与它的访问者一起工作:字符串和布尔值是可比较的。我不知道,为什么它会这样工作,但我发现它很有趣。我唯一的想法是带有布尔值的变体被解释为字符?有人可以给我解释一下吗?比较访客:

编辑这是带有一些测试用例的扩展主要功能:

输出:

0 投票
1 回答
403 浏览

c++ - Boost Spirit 和抽象语法树设计

我正在使用来自 Boost Spirit 的 Qi 来解析 VRML 1.0。有一个名为 Separator 的组节点,在 Separator 下方,可以容纳许多不同类型的节点。AST 基于 Boost.Variant,到目前为止看起来很长。我已接近变体中 20 种类型的限制。我知道我可以扩展变体的类型数量,但我确信必须有更好的方法来设计它。欢迎提出想法。

0 投票
1 回答
1099 浏览

c++ - Boost Variant:我怎样才能做一个返回设置类型的访问者?

我正在尝试编写一个使用 boost:variant 作为值的通用映射。我一直在尝试编写将返回适当类型的 get(std::string key) 函数。

到目前为止,这是我想出的:

我很好奇我应该如何处理迭代器?是否值得制作我自己的嵌套迭代器或只返回嵌套的 std::map。

编辑

我添加了我希望实现的类设计(即通用哈希图)。我遇到的问题是我想要一种方法让用户查询特定键是否存储为特定类型。

0 投票
1 回答
89 浏览

c++ - boost::variant 对象构造计数 VS 破坏计数

我已经使用 boost::variant 一段时间了,现在我试图弄清楚它是如何在内部工作的。我写了一个简单的测试,我无法理解结果。这是(简化)

这样的程序的输出是

为什么析构函数没有像构造函数那样被调用多次?由于在堆上调用析构函数,我知道这可能不是段错误,但在我看来,这种行为是危险的。我错过了什么吗?这与 boost::variant 的“备份”机制有关吗?

0 投票
1 回答
2737 浏览

c++ - 使用自定义类提升变体

我正在尝试boost-variant自定义类。我知道访问课程内容的一种安全方法是使用boost::static_visitor. 你知道为什么下面的代码不能编译吗?对使用的签名/声明是否有任何要求boost::static_visitor

我发现了这个问题Why can't I visit this custom type with boost::variant? 但我没明白。

问候

AFG

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 投票
0 回答
510 浏览

c++ - 是否可以将 boost::apply_visitor 的返回值存储在成员变量中?

是否可以将返回值存储boost::apply_visitor在类的成员变量中?
我需要让Test::Do功能正常工作,但不知道如何。

0 投票
1 回答
427 浏览

c++ - boost::variant 访问者选择了错误的重载

为什么会打印出以下内容"A boolean!"?我意识到正在进行一些奇怪的转换,因为如果我明确地构造一个 std::string 我会得到正确的行为。但是为什么visitor::operator()(bool)在以下情况下选择重载解析呢?

我正在运行 Visual Studio 2012(CTP 或不给出相同的结果)

0 投票
1 回答
1407 浏览

c++ - 提升::变体;定义访客类别

在 Java 中,我可以在不指定类型的情况下定义泛型类的变量。

然后我可以从文件中读取一些对象并将其类型转换为我想要的类类型。

boost::variant已经开始了一个变体定义。

我知道我需要指定 avisitor class但从这个示例中不清楚如何定义它以便我能够分配给我的tree变量Tree<std::string>or Tree<int>

然后我想从那里继续使用变量调用 Tree 的成员函数tree

0 投票
2 回答
3652 浏览

c++ - 提升::变体;std::unique_ptr 和复制

这个问题确定了不可复制类型不能与 Boost Variant 一起使用

Tree班级

TreeVisitor班级

TreeVariant

申请Visitors如下

还使用 boost::bind 获取所需参数

类型的编译器错误

Tree编译正确并经过测试。我该如何解决这些编译错误,这些错误似乎与尝试获取Tree类的副本有关,因为std::unique_ptr,这是不可能的?

SSCCE

示例使用: