如何正确使用boost::变体
How to use boost::variant correctly?
我打算将3D矢量用于异构数据。我找到了使用boost::variant
或boost.any
的解决方案。然而,我找不到任何简单的教程。我应该包括哪些图书馆?有人能给我简单的教程或例子吗?
Boost.Variant和Boost.Any有不同的用例。
Boost.Variant是关于和类型的:你的类型代表不同类型的并集,多种类型中的一种:
- 要求:了解所有可能类型的列表
- 优点:您可以查询它来了解当前哪个类型是活动的,并且在编译时检查所有操作
另一方面,任何类型的擦除都是最好的类型擦除。它可以容纳任何类型,甚至可以容纳像int
这样的内置类型。
- 需要:知道内部的类型才能对其执行任何操作
- 优点:只传递
boost::any
的代码可以忽略它可能包含的类型
boost网站上肯定有一个相对简单的教程/参考资料(boost变体和boost任意)。
至于你应该包括的库:那当然是一个提升。具体来说,您需要的头文件是boost/variant.hpp
和boost/any.hpp
。这两个库都是仅表头的库。这意味着您应该只安装boost(如果您还没有安装的话)。
相关文章:
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- boost::variant - 对变体应用算术的最简单方法
- 如何将 boost::hana::tuple 转换为 std::变体
- boost::带有布尔值和字符串的变体
- 如何通过std ::变体正确替换boost ::变体
- C 11中的Boost ::变体和多态性
- 是否可以使用Boost ::或Boost ::变体带有boost :: pool
- 使用访问者中的Boost变体中的类型不编译
- 在 Boost.Spirit 中,为什么向量(包裹在结构中)需要融合包装器,而不是变体?
- boost::变体对仅移动类型的处理中的奇怪行为
- boost变体对通用方法的简单调用
- boost ::变体 - 为什么模板参数比const字符串参数具有更高的优先级
- 将两个变体与Boost static_visitor进行比较
- BOOST ::变体无法解决运算符<<对于STD :: Ostream
- 使用谷歌测试中的EXPECT_EQ比较两个boost::变体对象
- 访问带有额外参数的boost变体
- 静态多态性与boost变体单访问者与多访问者与动态多态性
- boost::变体为朋友类
- 如何打印可流式传输类型的 boost::变体
- boost::变体.Boost::访问重载函数