boost :: variant实现

Cli*_*ton 9 c++ boost boost-variant

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

这样工作吗?

两名成员:

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

apply_visitor():

有一个switch关于代表当前存储类型的数字的语句来调用正确的重载(在最坏的情况下,这将被编译为跳转表,因此需要恒定的时间).

我知道还有一些优化可以肯定boost::variant不需要动态分配内存,详见此处,但我想我得到了这些.

imr*_*eal 7

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

  1. 它有一个整数which,表示使用的数据类型.

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

最后,访问者确实使用了一个switch,在编译时使用宏来生成,以展开所有类型的可能性.