gpt4 book ai didi

c++ - boost::变体实现

转载 作者:可可西里 更新时间:2023-11-01 16:38:53 25 4
gpt4 key购买 nike

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

是这样的吗?

两个成员:

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

apply_visitor():

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

我知道还有一些优化可以确保 boost::variant 不需要动态分配内存,详情 here ,但我想我明白了。

最佳答案

它的工作原理与您描述的差不多。长话短说:

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

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

最后,访问者确实是用一个 switch 实现的,它在编译时生成,使用宏展开所有类型的可能性。

关于c++ - boost::变体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com