异构阵列可能吗?

时间:2017-10-09 17:08:25

标签: c++ arrays containers

整数可以存储在字符数组中,字符可以存储在整数数组中。这是否意味着数组可以是异构数据类型?

我知道在容器中,项目必须有一些共同点,但是,当显式转换发生时,容器是否可以有变量?

2 个答案:

答案 0 :(得分:2)

标准容器设计为具有相同类型的所有元素。然而,有几种技术可以给人一种程度的异质性印象:

  • 使用可以包含您要存储的所有预期类型的​​类型(例如long long也可以存储longintshortsigned char值)。
  • 使用union类型,其中包含您要存储的每种类型的一个成员
  • 使用boost::any
  • 使用boost::variant,这是上述联合的更好替代方案。

您还可以考虑使用多态类型来存储任何派生类型的对象。然而,由于slicing的风险,这看起来可能更棘手。

答案 1 :(得分:1)

在静态类型语言中,数组必须是同类型的。 说“整数类型可以存储在char数组中而反之亦然”,这显然是正确的,因为字符是整数(即使字节数较少),并且在某些限制下char s和{{1可以互换。

您可以创建一个类int并将其子类化,以某种方式创建具有多态性的异构值数组。

但重点是什么?在C ++中使用不同类型的值没有任何有用且舒适的方法,并且使用它们的时间并不多。