问题标签 [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 回答
114 浏览

c++ - 不能用c++中的库

描述

我是 C++ 新手。我的项目需要使用任何库,这是 c++ 17 之后的一个新功能。在按照这个链接更新我的编译器之后。我仍然遇到错误。这是错误消息和我的测试代码。

g++ 版本:

g++ (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026
版权所有 (C) 2017 Free Software Foundation, Inc.
这是免费软件;查看复制条件的来源。没有
保修;甚至不考虑适销性或特定用途的适用性。

代码

编译

错误信息

在此处输入图像描述

0 投票
1 回答
175 浏览

c++ - 这是带有 std::any 或 std::is_copy_constructible 的 libstdc++ 中的错误,还是合法错误?

我遇到了一个相当麻烦的情况,我试图将 std::make_any 与我编写的类一起使用,该类在其构造函数之一中接受 std::any ,但试图提出一个最小的测试情况下,我认为这可能是 std::any 和/或 std::is_copy_constructible 实现中的一个错误,但我不能 100% 确定。以下是一些使用 g++8 和 clang++9 不同地工作或不工作的最小示例。在每个示例中,所有相同的代码行都存在,但有两行是否被注释掉的 4 种状态,以及结果。

我正在使用 C++17 标准,将-std=c++17标志传递给 g++-8 和 clang++-9,它们都使用 libstdc++ 版本 8.3.0(Ubuntu 18.04)。

以下使用 g++-8 和 clang++-9 编译。

正如人们所期望的那样,以下内容也适用于两者。

以下使用 g++-8 编译,但使用 clang++-9 编译失败。这很令人困惑,因为std::is_copy_constructible_v<Hippo>不应通过添加与复制构造无关的构造函数来更改 的值。

clang++-9 给出的错误是(剪裁长度):

在这里,看起来std::is_copy_constructible<Hippo>类型在使用点(在<any>标头内)不完整,但它应该有一个布尔值的 constexprvalue成员。这就是我认为的错误,因为 g++8 可以很好地编译它。据推测,该错误存在于 libstdc++ 的 std::any 和/或 std::is_copy_constructible 实现中,但由于 g++-8 有效而 clang++-9 失败,这令人困惑。

但是,以下代码在 g++-8 和 clang++-9 中都无法编译:

不出所料,clang++-9 产生的错误是相同的,但来自 g++-8 的错误声称对于 std::any 的构造函数,模板参数推导的所有候选者都失败,包括应该工作但埋在该构造函数中的构造函数是std::is_copy_constructible 的使用,所以我认为这是同样的问题,我很确定这是一个错误。我已经删除了错误消息中不相关的部分:

无论如何,我的问题是——这是 libstdc++ 中的一个错误,对吧?

0 投票
0 回答
153 浏览

c++ - 如何在 C++17 任何向量中查找数据类型?

我正在尝试查找任何类型向量的元素的数据类型。

我尝试了以下代码:

输出如下:

如您所见,intandbool被正确识别,但字符串类型返回其他内容。此外,所有复杂的 C++ 数据结构以及向量和映射等都会发生这种情况。有没有办法检测特定的数据类型?

list我的最终目标是在 python中实现自定义向量数据类型,例如 a 。具有基本的推送和获取功能。

0 投票
1 回答
50 浏览

c++ - 如何打印使用“std::any”类型的变量插入的字符串向量的元素

这是我的 C++ 代码的主要功能。

这给了我这样的错误:

0 投票
0 回答
37 浏览

c++ - 为什么非指针 std::any_cast 不返回引用?

any_cast()函数 - 例如,对于非常量引用操作数 - 具有以下签名:

为什么这个函数不返回T&- 文档说返回值仅仅是

?

0 投票
3 回答
72 浏览

c++ - 是否可以为 std::any-like 容器转发具有匹配模板类型的函数调用?

我还没有找到实现我想要的方法,但我没有足够的知识知道它是否不可能。帮助将不胜感激。

我们软件中的主要数据数据容器的行为有点像 std::variant 或 std::any:它有一个BaseContainer提供类型枚举的基类。派生实例DataContainer将实际数据保存在类型化张量成员变量中。所以一个简化的例子可以归结为这样的:

我们有许多基于底层模板化类型和维度处理数据的方法:

问题是,对于processData()我们想用 a 调用的每个方法BaseContainer,我们需要编写一个绑定方法来解开可能的类型以调用 的类型化版本processData()

我的问题是:是否可以制作一个单一的“适配器”方法(在任何已发布的 c++ 版本中),它可以采用函数(如processData())、BaseContainer 和可能的参数列表,并调用此函数的正确模板绑定与论点?

我未能动态绑定模板函数,因为我无法在没有模板类型的情况下传递名称。然而,模板类型需要基于 BaseContainer 是动态的。但也许还有其他方法可以实现我想做的事情?我对任何解决方案都非常好奇,主要也是为了扩展我的理解,只要解决方案的复杂度低于编写数百个适配器方法即可。

如果不出意外,是否可以使用预处理器宏生成“适配器”方法?

0 投票
1 回答
188 浏览

c++ - 在没有 RTTI 的情况下检查 std::any 的类型

我正在使用std::anyRTTI 并禁用异常。它可以工作并且std::any_cast<T>()能够检测类型是否正确,如std::any 中所述,没有 RTTI,它是如何工作的?. std::any::type()虽然没有 RTTI 被禁用。

我想检查我的std::any对象是否包含给定类型的值。有没有办法做到这一点?

0 投票
3 回答
567 浏览

c++ - `auto` 和 `std::any` 有什么区别?

我最近遇到了这个std::any类,在 C++17 中引入,基于boost::any. 这个类可以“持有任何类型的实例”并auto自动推导出变量的数据类型。

那么主要区别是什么?优缺点都有什么?

0 投票
1 回答
192 浏览

c++ - std::any 包含 std::tuple编译失败

我意识到嵌套的 std::any 是个坏主意。尽管如此,我遇到了一些让我摸不着头脑的事情,我只是想了解编译器为什么会窒息。考虑以下代码行(假设arg变量是包含另一个 std::any 的 std::any):

那行编译得很好。现在,考虑这一行,其中我有一个 std::any 包含一个 std::tuple 包含另一个 std::any:

现在,编译器崩溃了。这些是我得到的错误:

我很难解开所有这些并找出问题所在以及如何解决它。

编辑:我们在评论中发现此代码不能在 G++ 9 及更低版本下编译,但在 G++ 10 及更高版本上编译,并且在 clang 10 及更低版本上也失败,但在 clang 11 及更高版本上编译。有没有人猜测为什么会这样?

0 投票
0 回答
233 浏览

c++ - 为什么 std::any 实现使用 typeid?

即使使用 -fno-rtti 编译,它似乎在 GCC 和 Clang 中也能std::any 正常工作。

在查看 libc++ 源代码时,我发现他们只是使用了一个简单的技巧:

他们获取在任何类型上模板化的变量的地址,这就是他们获得唯一ID的方式。

但是这个代码只有在没有打开 RTTI 时才有效。

这让我想知道。为什么他们甚至首先使用 RTTI?为什么不总是使用这个解决方案?我不知道为什么typeid会比简单的指针(指向每个类型实例化的静态变量)比较快。