在阅读boost any和experimental any上的文档时, 我没有看到提及type erasure。
我试图理解"键入擦除的概念"因为它适用于C ++。
说"任何"是否正确? type使用"类型擦除"存储其值时?
说它使用" polymorphism"是否正确?存储其值时?
是"类型擦除"一种多态性"?
关于polymorphism的维基百科文章,也未提及"键入删除"。
它提到" subtyping"。是"类型擦除"一种"子类型"?
很抱歉,如果这个问题出现在不同的方向。
总结一下,
如何"键入擦除"," polymorphsim"和"子类型"与C ++中的任何类型有关吗?
答案 0 :(得分:1)
在存储其值时,“any”类型是否使用“type erasure”是否正确?
也许我和其他人对“类型擦除”有不同的定义,但使用类型擦除来实现any
对我没有任何意义。如果我们使用定义"represent a variety of types through a single generic interface",那么any
,std::function
等符合该法案。 wikipedia定义“确保程序的运行时执行不依赖于类型信息”在C ++的上下文中没有任何意义。泛型(类型擦除的典型例子)并不意味着“从语言中删除类型”。此外,std::any
(可选)使用RTTI。所以我会在维基百科以外寻找其他地方。
在存储其值时使用“polymorphism”是否正确?
多态性是实现any
的一种方式。但是,这并不是必需的。据我所知,只有Boost使用多态。请参阅this answer。
其他实现表明它不是必需的:
“类型擦除”是一种“多态”吗?
没有。您是否认为模板,泛型和std::function
都是多态的?