boost :: variant实现

时间:2012-11-13 02:28:35

标签: c++ boost boost-variant

我只是对boost::variant的实施感到好奇。

它是否像这样工作?

两名成员:

  1. 表示当前存储类型的数字(即第一个模板参数为0,第二个模板参数为1等)
  2. 所有可能类型的联合(当然是最大的类型)。
  3. apply_visitor()

    对表示当前存储类型的数字有一个switch语句来调用正确的重载(在更糟糕的情况下,这将被编译为跳转表,因此需要一段时间)。

    我知道还有一些优化可以确保boost::variant不需要像详细here那样动态分配内存,但我想我得到了这些。

1 个答案:

答案 0 :(得分:7)

它的工作方式与您描述的方式非常相似。长话短说:

  1. 它有一个整数which,表示使用了哪种数据类型。

  2. 使用boost aligned_storage实现存储,它基本上是最大数据大小的缓冲区。 (它在联合中,但为了对齐)

  3. 最后,访问者确实用switch实现,在编译时使用宏来生成所有类型的可能性。