问题标签 [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.
c++ - Boost Variant:如何获取当前持有的类型?
据我了解,所有类型的boost.variant都被解析为真正的类型(这意味着好像 boostvariant<int, string> a; a="bla-bla"
在编译后会变成string a; a="bla-bla"
) 所以我想知道:如何将什么类型放入 boost 变体中?
我尝试了什么:
c++ - 任何/变体的 C++ 容器,每个元素具有不变的类型
我std::map<const char*, boost::any>
用来存储我的图书馆的设置。每个设置只使用一个基础值类型,我想在配置调用set()
或类似的过程中强制执行这一点。使用正确类型的默认值初始化设置。
这是一些伪代码,希望能显示我想要实现的目标:
是否可以在运行时捕获这样的类型错误?如果可能的话,我不希望在我的 API 中有模板函数。
我已经使用过,但如果这是唯一可行的解决方案,我boost::any
可能会考虑 boost::variant 。which()
c++ - 如何在包含类型的变体上使用比较运算符?
我在我的代码中使用了很多变体,我需要与某些地方的内容进行比较,以测试变体的内容的价值。
例如:
使用我为此目的编写的这个简单的模板函数:
这很好用,但代码开始难以阅读。我更喜欢使用这样的比较运算符:
但是我无法提供运算符的有效实现。问题是 == 运算符已经在变体中实现,在编译时失败......
有人知道实现它的方法吗?还是一种禁用此限制的方法?即使我必须为变体中包含的每种可能类型实现一个版本,这也不是问题。
谢谢
c++ - 在 std::vector 内设置包含指针的 boost::variant
我有一个 boost::variant 类型的 std::vector,其中包含指向标准内置类型的指针。
在代码中
这很好用,我可以使用boost::get<int *>
or访问向量中的值boost::get<double *>
。
但是,我想知道是否可以直接在向量中设置元素的值,而不是将其指向引用。换句话说,我想做这样的事情
但这不会编译。有人对如何解决这个问题有建议吗?
谢谢。
编辑:
显然,我没有足够的分数来回答我自己的问题,所以我想我会把我的解决方案放在原来的问题中。希望这对偶然发现此页面的人有所帮助。
我想我会回答我自己的问题,以防它对某人有所帮助。我写了一个访问者类,它修改了变体中的指针所指的内容。这是访问者类的代码(当然,这可以做成模板类)。
为了将其用于原始问题中的变体向量,代码如下:
c++ - 如何制作适用于 gcc 4.6 的递归 boost::variant?
我正在解码 bencode,并且有一些适用于 gcc 4.4 的代码。但是最近升级到 gcc 4.6 这个代码不再构建:
g++ 给出了这个错误信息:
最新的 boost 版本(目前为 1.48)的文档指出“由于几个编译器中的标准一致性问题,make_recursive_variant 不被普遍支持”,您应该使用 recursive_wrapper。但是我在进行更改时遇到了问题:有人知道使用包装器应该是什么样子吗?
c++ - boost::variant 如何存储引用?
以下代码编译并执行“正确的事情”:
boost::variant 如何存储引用?根据 C++ 标准,如何存储引用完全取决于编译器。实际上,如何boost::variant
知道引用占用了多少字节?sizeof(T&) == sizeof(T)
,所以它不能使用sizeof()
运算符。现在,我知道引用最有可能实现为指针,但语言不能保证。get<>
变体存储引用时如何和访问如何工作的一个很好的解释得到了加分:)
c++ - 构造一个包含变体类型索引中第 n 个类型值的 boost 变体?
我想构造boost::variant
包含默认构造值的 s,用类型索引指定 - 无需在类型索引上编写我自己的 switch 语句。
我想这一定是可能的,不知何故,与 MPL?
不过要澄清一下,索引不是编译时常量表达式。
用例是我需要构造一个变体,稍后将替换为包含正确值的变体,但此时我只知道类型索引。将其视为一个惰性反序列化问题。
c++ - boost::variant 如何允许字符串常量?
所以我一直在玩类型列表,他们很有趣吗?我想做的一件事是尝试实现我自己的variant
课程,作为关于类型列表如何工作以及它们如何有用的教育实验。这是我的代码目前的样子:
这很好用!我可以编写如下内容,并且效果很好:
一切都按预期工作:-)。这是我的问题。我可以毫无问题boost::variant
地编写以下内容:
使用我的版本,如果我写类似:
我收到这样的错误:
本质上,它无法char[12]
在变体的类型列表中找到。这是有道理的,因为char[12]
实际上并未明确列为其中一种类型......
如何boost::variant
使这项工作如此无缝?我觉得这是我对boost::variant
工作原理的理解中唯一真正缺失的部分。想法?
c++ - boost::ptr_list 中的前向声明类
对于一个小型科学项目,我设置了一个模拟类,它将所有模拟对象保存在 ptr_list 中。因为我需要快速访问所有粒子,所以我添加了一个额外的 ptr_list。现在 boost 抱怨,因为它不喜欢前向声明的类。recursive_wrapper
已经向我指出,但ptr_list< recursive_wrapper<Particle> >
似乎都不起作用。
c++ - Boost::Variant - “没有匹配的调用函数”
关于这个问题有很多问题,但似乎没有一个可以解决我的问题。我不认为这真的是一个 Boost::Variant 问题;我很确定我只是以不正确的方式使用模板。我能够剥离代码,以便您可以编译它并自己查看问题,这非常简单 - 我不断从 gcc 收到“无函数调用”错误,即使它似乎就在那里。我可能在做一些愚蠢的事情,但我似乎看不出我做错了什么。