1

在阅读有关boost any实验性 any的文档时,
我没有看到任何提到类型擦除的内容。

我试图理解适用于 C++ 的“类型擦除”的概念。

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

关于多态性的维基百科文章也没有提到“类型擦除”。
它提到了“子类型”。“类型擦除”是一种“子类型”吗?

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

总结一下,

“类型擦除”、“多态模拟”和“子类型”与C++中的任何类型有何关系?

4

1 回答 1

1

说“任何”类型在存储其值时使用“类型擦除”是否正确?

也许我和其他人对“类型擦除”的定义不同,但是使用类型擦除来实现any对我来说没有任何意义。如果我们使用“通过单个通用接口表示多种类型”的定义,那么any,std::function等就符合要求。维基百科的定义“确保程序的运行时执行不依赖于类型信息”在 C++ 的上下文中没有任何意义。泛型(类型擦除的原型示例)并不意味着“从语言中删除类型”。此外,std::any(可选)使用 RTTI。所以我会在维基百科以外的地方寻找。

说它在存储其值时使用“多态性”是否正确?

多态性是一种实现方式any。但是,无论如何都不需要它。据我所知,只有 Boost 使用多态性。看到这个答案

促进

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

libc++

libstdc++

另请参阅问题和随附的问题

“类型擦除”是一种“多态性”吗?

不。你认为模板、泛型和std::function都属于多态性吗?

于 2016-05-14T21:24:38.020 回答