gpt4 book ai didi

c++ - boost::get vs boost::apply_visitor 从变体中获取值时

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:30 32 4
gpt4 key购买 nike

我们在生产代码中广泛使用了 boost::variant 的集合。我们从这个集合中提取值的方式是

for (auto & var : vars)
{
switch (var.which())
{
case 1 :
AVal = boost::get<A>(var);
break;
case 2 :
BVal = boost::get<B> (var);
...
}
}

阅读更多关于变体的信息,我可以看到一个不同的选择是

for (auto & var : vars)
{
switch (var.which())
{
case 1 :
AVal = boost::apply_visitor(AVisitor, var);
break;
case 2 :
BVal = boost::apply_visitor(BVisitor, var);
...
}
}

忽略 apply_visitor 提供编译时类型安全值访问并且更强大这一事实,我是否应该期望上述任何一种方法在运行时性能方面有任何差异?

最佳答案

boost::variant 只是一 block 内存,它与您提供的最大数据类型对齐,并且是一个整数,用于指定当前使用的是这些类型中的哪一种。还有很多允许访问逻辑的编译时宏。

放弃一两次运行时检查以确保正确的类型被抓取,访问该内存位置应该没有其他成本,重新解释为所需的类型。

关于c++ - boost::get vs boost::apply_visitor 从变体中获取值时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032817/

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