gpt4 book ai didi

c++ - std::any 是否使用类型删除、子类型化或多态性?

转载 作者:行者123 更新时间:2023-11-30 05:27:32 26 4
gpt4 key购买 nike

在阅读 boost any 上的文档时和 experimental any ,
我没有看到任何关于 type erasure 的提及.

我正在尝试理解适用于 C++ 的“类型删除”概念。

“any”类型在存储其值时使用“类型删除”是否正确?
它在存储值时使用“多态性”是否正确?
“类型删除”是一种“多态性”吗?

关于 polymorphism 的维基百科文章,也没有提到“类型删除”。
它提到“子类型化”。 “类型删除”是一种“子类型化”吗?

抱歉,如果这个问题似乎朝着不同的方向发展。

总而言之,

“类型删除”、“多态性”和“子类型化”与 C++ 中的任何类型有何关系?

最佳答案

Is it correct to say that the "any" type uses "type erasure" when storing its values?

也许我和其他人对“类型删除”的定义不同,但是使用类型删除来实现any对我来说没有任何意义。如果我们使用定义 "represent a variety of types through a single generic interface" ,然后 anystd::function 等都符合要求。 wikipedia “确保程序的运行时执行不依赖于类型信息”的定义在 C++ 的上下文中没有任何意义。泛型(类型删除的原型(prototype)示例)并不意味着“从语言中删除类型”。此外,std::any(可选)使用 RTTI。所以我会寻找维基百科以外的其他地方。

Is it correct to say that it uses "polymorphism" when storing its values?

多态性是实现any 的一种方式。但是,无论如何都不需要它。据我所知,只有 Boost 使用多态性。参见 this answer .

boost

其他实现表明它不是必需的:

libc++

libstdc++

另见 this以及随附的 question

Is "type erasure" a kind of "polymorphism"?

没有。您是否认为模板、泛型和 std::function 都是多态性?

关于c++ - std::any 是否使用类型删除、子类型化或多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com