问题标签 [stdany]

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 回答
666 浏览

c++ - 为什么 std::any 没有 unsafe_any_cast?

我的本地版本的 Boost 标头 (1.56.0) 中定义了以下函数boost/any.hpp,逐字复制:

即使在线文档甚至不承认它们的存在: http: //www.boost.org/doc/libs/1_59_0/doc/html/any/reference.html

我注意到std::any似乎也不支持不安全的任何演员。

为什么没有引入 C++17 标准std::unsafe_any_cast

如果找不到确切的原因(或者如果根本没有提出),那么不提供对存储在std::any对象中的值的不安全访问的最令人信服的论点是什么?

0 投票
2 回答
54 浏览

c++17 - 将多种类型存储到类成员容器中

我在这里阅读此 Q/A ,由于我的问题相似但不同,我想知道如何执行以下操作:

假设我有一个基本的非模板非继承类,称为Storage.

我希望这个类有一个容器(无序的多图)是我倾向于的地方......它将std::string为变量类型 T 保存一个名称 id。该类本身不会是模板。但是,添加元素的成员函数将是。要添加的成员函数可能如下所示:

然后,此函数将填充无序多图。但是,每次调用此函数时,每种类型都可能不同。所以我的地图看起来像:

如果类本身不是模板,我将如何使用模板、可变参数,甚至可能是元组、任何或变体来声明这样一个无序的多重映射?我不喜欢使用标准以外的 boost 或其他库。

我试过这样的事情:

但我似乎无法让 typedef 正确,因此我可以像这样声明它们:

0 投票
2 回答
1269 浏览

c++ - 获取 std::any 的大小

有什么方法可以获取存储的数据的大小(以字节为单位)std::any?我想出的唯一解决方法是查询其值的类型,std::any::type并将结果与​​已知类型的列表进行比较,例如my_any.type() == typeid(T),大小为sizeof(T). 不幸的是,此解决方案仅在预先知道类型时才有效。

你知道有什么解决办法吗?

0 投票
2 回答
498 浏览

visual-studio-2017 - MSVC 2017 支持 std::any 吗?

我尝试编译一段代码:

但我收到此错误:

我想知道(如果可能的话)我怎样才能拥有这个功能。我在他们的网站上没有看到任何关于它的信息,但知道他们需要多少时间来更新它们也许可以完成

0 投票
4 回答
8334 浏览

c++ - 我什么时候应该使用 std::any

由于引入了 C++17 std::any。现在可以编写这样的代码

double 被分配给变量var,而不是 astd::string被分配给它。

为什么std::any被介绍了?

我认为这违反了least astonishment rule,因为我很难想到一种情况,可以用它来更清楚地表达我喜欢表达的东西。

有人可以给我一个很好的例子,什么时候std::any是有益的。

https://gcc.godbolt.org/z/-kepOD

0 投票
1 回答
128 浏览

c++ - std::any - 为什么它缺少这么多运算符?

我正在考虑将 std::any 用于类型擦除作为我正在构建的接口的一部分,我想知道为什么它缺少这么多运算符,比如“+”、“==”。我在这里修改了 Coliru ,在那里我将 std::any 扩展为可汇总和可打印到 ostream 中。这仅适用于现在持有 double 的任何人,但这个概念有效,它只是需要完成以支持所有基本数字数据类型(只要 lhs 和 rhs 是操作数的相同类型)的实现。

考虑到我能够在这么短的时间内扩展任何类似的东西,为什么 stl 实现在操作数方面如此有限?

任何想法表示赞赏。

0 投票
5 回答
4914 浏览

c++ - 在 std::any 的 std::vector 中找到一个元素

我想检查向量中是否存在元素。我知道下面的代码会检查它。

但我有任何类型的向量。即std::vector<std::any> 我像这样将元素推入向量中。

所以我需要找出向量中是否存在字符串“A”。可以 std::find 帮助吗?

截至目前,我正在使用下面的代码来执行此操作

0 投票
1 回答
883 浏览

c++ - 在 std::map 中使用“自动”

我正在解析一个 JSON 文件,这些值可以由整数、字符串或浮点数组成。通常我有一个这样定义的地图:

问题是如果可以有不同的数据类型,我不清楚如何使用 map,我试过:

但我收到一个错误:

有没有办法可以将它与不同的数据类型一起使用,或者我是否需要定义一个可以包含不同数据类型的对象,例如:

还是有更好的方法来做到这一点?谢谢!

0 投票
1 回答
169 浏览

c++ - 无法移动 std::any

以下代码

编译失败,抱怨使用已删除的复制构造函数unique_ptr。在模板参数中替换为此代码后std::anyvptr此代码将编译,因此问题显然在于any

如何强制std::any移动而不是复制?

0 投票
1 回答
488 浏览

c++ - 带有 std::any 值的 unordered_map 不能使用 any_cast 字符串

我是 C++ 新手,我正在研究std::unordered_mapstd::any. 我创建了一个示例演示,它生成一些虚拟数据,然后将它们插入到地图中。

之后(在注释掉的代码中)我使用any_cast成功打印出值。

但是,在底部,您可能会看到我尝试以 0 成功检索特定密钥。我得到的错误是Bad any_cast并且转换与我用于打印的代码完全相同(目前已被注释掉)。

如果这是一个愚蠢的错误,我很抱歉,但我很新。先感谢您。