问题标签 [boost-any]

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 投票
3 回答
2398 浏览

c++ - Boost::any 和多态性

boost::any用来存储指针,想知道是否有办法提取多态数据类型。

这是理想情况下我想做的一个简单示例,但目前不起作用。

这失败了,因为 a 正在存储 B*,而我正在尝试提取 A*。有没有办法做到这一点?

谢谢。

0 投票
1 回答
22209 浏览

c++ - Boost.Any 与 Boost.Variant

我无法在 Boost.Any 和 Boost.Variant 之间进行选择。
我应该什么时候使用每一个?

各自的优点和缺点是什么?

我基本上希望从外部来源存储一些状态。

0 投票
1 回答
13772 浏览

c++ - 如何使用 boost::any_cast 转换为基本类型?

我正在使用 boost::any 来拥有多态类型,我需要能够将对象转换为其基本类型。

main函数的代码在运行时抛出如下错误:

如果我将 boost::any_cast 代码中的 static_cast 更改为 reinterpret_cast 它似乎可以工作。但是我不确定这样做的后果。

你有什么想法?

0 投票
1 回答
752 浏览

c++ - 在数组中存储对象

我想在地图中保存升压信号对象(关联:信号名称→信号对象)。信号签名不同,所以第二种映射应该是boost::any

问题是如何在不定义新信号签名类型的情况下存储对象?

所有这些尝试都会引发错误:

0 投票
2 回答
3483 浏览

c++ - 提高任何使用量

如何将我自己的类对象从 boost.xml 插入到 ptr_map 中。对象是模板化的,所以我不能在地图中使用一些静态类型名。所以我做了:

我的班级继承了boost::noncopyable

错误是:错误:no matching function for call to ‘boost::ptr_map


UPD:我更喜欢做一些包装,不要使用 boost::any。所以:

为什么它不起作用(同样的错误)?我可以将继承的类传递给父接口。怎么了?

0 投票
1 回答
403 浏览

c++ - 从任何铸造

我正在使用任何类型的值将一些类打包到 ptr_map 中。

现在我想从任何恢复我的信号对象。这是一个特殊的功能:

你可能还记得,boost 的信号是不可复制的,所以我只能存储指针,我的函数也应该返回指针。

现在示例用法:

在这里我得到段错误。我检查了get函数中每个对象的类型:

有什么问题吗?与铸造一致的段错误。任何对象都应该包含插入类型吗?为什么它不想投射。

0 投票
3 回答
288 浏览

c++ - 铸造指针

我正在使用 ptr_map 来存储不同类型的指针。

我在那里存储了一些模板化的类对象:

现在我想从地图中获取值。这是一个带有参考的示例:

但我不喜欢引用,因为我不能返回,例如,如果转换错误或对象不存在,则返回 NULL。

如何从该地图中获取指针?

这构建但在铸造时失败,为什么?

0 投票
9 回答
10066 浏览

c++ - 如何将 boost::any 打印到流中?

我有一个 Map std::map<std::string, boost::any>,它来自boost::program_options包。现在我想打印该地图的内容:

不幸的是,这是不可能的,因为boost::any没有operator<<定义。

打印该地图的最简单方法是什么?

我可以为任何自动尝试将每个any转换为 int、然后是 double、然后是 string 等的输出运算符定义我自己的输出运算符,每次忽略错误并尝试转换直到转换成功并且我可以打印为指定的类型。

但是Boost中应该有更简单的方法吗?我需要类似反向的东西lexical_cast...

0 投票
1 回答
491 浏览

c++ - 重载运算符 == 用于 STL 容器

我正在尝试从中删除一个类对象list<boost::any> l

我试着写这样的东西作为成员函数

你将如何编写一个重载函数来从 std::list 中删除一个类的对象boost::any

0 投票
4 回答
4716 浏览

c++ - C++ - boost::any 序列化

据我了解,占位符没有序列化(boost::serialization实际上)支持。boost::any

有人知道是否有办法序列化自定义boost::any实体?

这里的问题很明显:boost::any使用基于模板的占位符来存储对象并typeid检查是否boost::any_cast合适。

因此,有一个自定义的抽象超类placeholder和自定义的基于模板的派生类,它们的创建方式如下:

显然,这在考虑序列化这些东西时也会带来一些麻烦。也许有人知道一些技巧来进行这种序列化(当然还有适当的反序列化)?

谢谢