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

c++ - C++11 标准是否提供类似 boost::any 的东西?

例如boost::function几乎完全移至std::function,与boost::shared_ptr

但是我找不到std::any?它是重新命名还是根本没有以任何理由置于新标准中?

0 投票
7 回答
49390 浏览

c++ - C++ std::map 持有任何类型的值

基本上我希望 MyClass 包含一个将字段名称(字符串)映射到任何类型的值的 Hashmap。为此,我编写了一个单独的 MyField 类来保存类型和值信息。

这是我到目前为止所拥有的:

但正如你所见,map 声明失败,因为我没有为 MyField 提供类型参数...

所以我想它必须是这样的

或者


但这显然破坏了我的整个目的,因为声明的地图只能包含特定类型的 MyField 。我想要一个可以包含任何类型的 MyField 类的地图。

有什么办法可以做到这一点..?

0 投票
3 回答
441 浏览

c++ - 如何设计符合标准的 std::any 实现的存储?

标准工作草案 (n4582, 20.6.3, p.552) 提出了以下实施建议std::any

实现应避免为包含的小对象使用动态分配的内存。[ 示例:构造的对象仅包含一个 int。—结束示例] 这种小对象优化仅适用于 is_nothrow_move_constructible_v 为真的类型 T。

据我所知,std::any可以通过类型擦除/虚拟函数和动态分配的内存轻松实现。

std::any如果在销毁时不知道编译时间信息,如何避免动态分配并仍然销毁这些值;如何设计遵循标准建议的解决方案?


如果有人想查看非动态部分的可能实现,我在 Code Review 上发布了一个:https ://codereview.stackexchange.com/questions/128011/an-implementation-of-a-static-any-类型

这里的答案有点太长了。它基于 Kerrek SB 对以下评论的建议。

0 投票
2 回答
2920 浏览

c++ - 类型擦除类型擦除,“任何”问题?

所以,假设我想使用类型擦除来键入擦除。

我可以为启用自然的变体创建伪方法:

我的问题是,如何将其扩展到 a std::any

它不能“原始”完成。但是在我们分配/构造 a 的时候,std::any我们有我们需要的类型信息。

所以,理论上,一个增强的any

可以以某种方式自动重新绑定一些代码,以便上述类型的语法可以工作。

理想情况下,它的使用会与变体案例一样简洁。

现在我可以将其保留为type,同时合理地使用 lambda 语法来保持简单吗?

理想情况下,我想要:

或类似的语法。这是不可能的吗?不可行?简单的?

0 投票
2 回答
954 浏览

c++ - 带有 std::any 和 std::optional 的 any_cast

如果我将 aT放入 中std::any,我可以使用any_cast<T>(my_any). 但是标准(= C++17,目前处于投票阶段)是否包含一个函数,如果 oa 是则any_cast<T>(optional<any> oa)返回,否则返回?或类似的规定?nulloptnulloptstd::any_cast<T>(oa.value())

编辑:由于人们似乎在建议实现,我还将列出我现在使用的内容:

0 投票
4 回答
4283 浏览

c++ - 在 Xcode 8.1 中使用 C++17 'any'

我在 Xcode 8.1 版中使用 C++。我需要使用 Boost 的功能,boost::any但强烈反对将 Boost 的任何部分引入我们的项目(请不要争论)。

我看到这std::any是“合并到 C++17” here

我想在我的 Xcode 8.1 项目中使用它。我曾尝试-std=c++1z在项目中用作自定义标志,但似乎找不到它的标题。

如何在我的 Xcode 项目中使用std::any或?std::experimental::any

我可以从实现中下载适当的标头并将它们放入项目的源代码中吗?或者,更好的是,实际上现在可以在我的 Xcode/Clang/C++ 版本中使用?

0 投票
1 回答
2992 浏览

c++ - `std::any_cast` 返回一个副本

我正在阅读文档std::any_cast,我发现 API 的强制转换要么返回一个值到所持有的对象,要么返回一个指向它的指针,这很奇怪。为什么不返回参考?每次使用非指针类型参数调用函数时都需要进行复制。

我可以看到强制转换的指针版本可能会更多地表明意图并且可能更清楚一些,但是为什么不将返回的值作为这样的引用呢?

代替

此外,即使您要求引用,演员也会删除引用并将副本返回到存储的对象,请参阅此处http://en.cppreference.com/w/函数重载 1-3 的返回值的解释cpp/实用程序/任何/any_cast

0 投票
1 回答
323 浏览

c++ - 是否可以将两个任意函数与 C++17 中的 std::any 进行比较?

我认为 C++ 如何处理函数指针和 std::function 是一个很大的限制,目前不可能以优雅的方式比较两个不同类型的任意函数。

我现在想知道 C++17 是否会通过引入std::any

这会像我预期的那样表现吗?

0 投票
1 回答
723 浏览

c++ - 为什么在 dlopen'd 函数中传递的 std::any 的 std::any_cast 会引发错误

我正在玩弄 c++17 和插件,我遇到了一个我无法解决的错误。在下面的 MWE 中,我可以调用一个带有 a 的本地函数,std::any当我尝试读取内容时,一切都按预期工作。当我通过插件(dlopen)加载这个完全相同的功能时,它可以正确地看到任何类型的类型,但看不到std::any_cast内容。

在找出导致此错误的原因时,将不胜感激任何帮助。

这是我的环境,MWE,以及由此产生的错误。

>> g++ --version

>> scons --version

>> tree

>> cat SConstruct

>> cat src/SConscript

>> cat src/plugin.cpp

>> cat src/main.cpp

>> scons

>> tree

>> bin/driver

0 投票
1 回答
215 浏览

c++ - 具有特征的 C++ 类型擦除

我想知道这是否有可能制作一个符合这样一个特征的擦除类型:

并像这样使用它?