问题标签 [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 投票
2 回答
1005 浏览

c++ - boost::any 替换下面的代码

我希望摆脱对我的代码的增强依赖。我有以下结构构造。在代码中的另一个位置调用和使用此结构时,将使用该结构boost::any_cast。我知道模板类会做到这一点,但很难编写这个模板。- C++ 新秀。

0 投票
2 回答
3012 浏览

c++ - QVariant vs boost::any vs boost::variant

我需要有效的方法来将不同类型的值(int、float、QString 或 std::string、bool)存储在像 QVariant 这样的“通用”容器之一中。

我想归档更少的内存使用。

我更喜欢不存储内部值类型的容器,因为它是开销。

我应该使用哪一个?

0 投票
1 回答
76 浏览

c++ - 提振精神,提振任何意想不到的结果

我有以下代码:

输出

我认为在这种情况下演员应该可以正常工作。我错了吗?我该如何解决?

0 投票
1 回答
133 浏览

c++ - 提升精神,提升任何和引用的字符串 - 编译时错误

我有以下代码:

在我添加之前它编译得很好

由于字符数量限制,我无法在此处和 paste.org 上发布错误。

我究竟做错了什么?我该如何解决?

0 投票
3 回答
749 浏览

c++ - Boost:任意分布向量

尊敬的 Stack Exchange 专家,

我正在尝试建立一个类(多变量分布函数),它将升压分布存储在 std::vector (边际分布函数)中。虽然这可以使用 boost::variant (请参阅我的问题:Boost: Store Pointers to Distributions in Vector),但我也尝试了 boost::any。原因是使用变体时,我必须在设置变体时对潜在类型(边际分布)进行硬编码,而我想避免这种情况。

虽然不同实现的分布类不共享一个共同的父类,但有一些函数,如 boost::math::cdf 或 boost::math::pdf 可以应用于所有分布,并且我想应用迭代标准::向量。

使用我生成的任何以下代码(运行良好),但现在我遇到了函数 any_cdf 需要检查类型的问题。

虽然我在设置向量时规避了对类型的硬编码(至于变体),但我现在需要对 any_cdf 函数中的类型进行硬编码(而具有变体的解决方案可以通过模板化的访问者函数处理 cdf 函数的应用,因此没有任何类型规范),这意味着要管理大量代码,大量 if 语句......

但是,逻辑根本没有改变(我转换了类型,然后在所有 if 语句中应用了 cdf 函数),如果除了 boost 分布之外的其他内容存储在列表中,我也不会真正关心函数的行为。

那么有没有机会得到我的蛋糕并吃掉它,这意味着不会被迫在 any_cdf 中硬编码发行版的铸造类型(很像变体的模板化访问者函数)?

非常感谢您的帮助,H.

Ps 如果这不可行,在这种情况下,我通常会更好地使用 boost::any 或 boost::variant 吗?

编辑:关于评论,任何似乎都不是手头任务的最简单/最佳选择。然而,出于完整性原因,类似 boost::any 的实现的访问者在以下位置讨论: boost::any 的访问者模式

0 投票
2 回答
247 浏览

c++ - boost::any_cast(const any&) 使用 const_cast<> -- 这不是潜在的 UB 吗?

boost/any.hpp(1.55 版)定义(第 263 行)

但是,const_cast<>如果原始对象声明const

那么,boost是犹太洁食吗?

0 投票
1 回答
986 浏览

c++ - boost::spirit::hold_any 内存损坏

我有一个大型代码库,可以使用boost::anyboost::spirit::hold_any(取决于宏定义)。

hold_any似乎与boost::any(例如如何将 boost::any 打印到流?类型擦除 - 第 IV 部分)兼容并且更快(为什么你不应该使用 boost::any)但我遇到了几个分段错误错误使用hold_any(提升 v1.55 / 1.54 / 1.53)。

这是一个最小的工作示例,它表现出与原始代码相同的问题:

该程序似乎可以正常工作:

  • boost::spirit::hold_any变为boost::any;
  • 将 的内容更改为hold_any足够小的数据类型以执行小缓冲区优化(例如从std::stringint)。

在 Boost Spirit 等广泛使用的库中可能存在一些重大错误似乎很奇怪,但是

  • 我很难在示例中找到错误;
  • 我试过 g++ / clang++ 没有成功。

这个例子有什么问题?

0 投票
1 回答
1114 浏览

c++ - C++ 开启数据类型

我有一个Attribute类,它有一个 Enum 指定属性 ( INT_64, UINT 64, INT_32, STRING, DOUBLE, etc.) 的类型。这个 Attribute 类使用 boost::any 来保存枚举指定的类型的向量。

目前,为了处理这些数据,我有一个很大的 switch 语句,至少对于基本数据类型,我觉得会有一种更简单的方法来做到这一点。

我的 switch 语句看起来像这样:

属性定义为:

有没有办法避免 switch 语句,做类似的事情:

0 投票
1 回答
269 浏览

c++ - C++ 通用数据类型

fast什么是C++ 中通用数据类型的最佳方法。我有一个事件系统,需要能够在程序周围传递事件信息。

到目前为止,我只需要 float/int/ptr,我在联合中处理了这个。但现在我有一些大多数结构,这变得有点复杂,所以我正在重新审视它。

我进行了深入研究,boost::any但这太慢了,可能会有很多数据飞来飞去,但这个想法似乎是正确的方向。

我对使用 void* 数据保持有一个相当幼稚的想法,但很快就变得非常难看。

0 投票
1 回答
2975 浏览

c++ - 将 boost::any 实例转换为其真实类型

我最近开始使用BoostC++ 库,并且正在测试any可以保存任何数据类型的类。实际上,我正在尝试定义operator<<以轻松打印任何类型变量的内容any(当然,内容的类也应该operator<<定义)。我只从样本类型(intdouble...)开始,因为它们已默认显示。直到现在,我有这个代码:

所以这里的问题是我必须枚举所有可能的类型。有没有办法将变量转换为particular type具有type_infothis 的particular type