我只是对boost::variant
的实施感到好奇。
它是否像这样工作?
两名成员:
apply_visitor()
:
对表示当前存储类型的数字有一个switch
语句来调用正确的重载(在更糟糕的情况下,这将被编译为跳转表,因此需要一段时间)。
我知道还有一些优化可以确保boost::variant
不需要像详细here那样动态分配内存,但我想我得到了这些。
答案 0 :(得分:7)
它的工作方式与您描述的方式非常相似。长话短说:
它有一个整数which
,表示使用了哪种数据类型。
使用boost aligned_storage
实现存储,它基本上是最大数据大小的缓冲区。 (它在联合中,但为了对齐)
最后,访问者确实用switch
实现,在编译时使用宏来生成所有类型的可能性。