对Boost变体类型的调度是否需要线性时间?

时间:2010-01-28 21:00:06

标签: c++ boost variant

调度boost :: variant的效率如何?

如果它是一个switch语句,它应该只花费O(1)时间,但据我所知,模板元程序设计只能生成if,这会将boost :: variant调度放在O(n)的运行时开销上,其中n =变体中的类型数。

有人可以确认/否认/启发我吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

看看来源,它应该是恒定的时间。 Boost使用Boost.PreProcessor生成一个switch-table,并跟踪它应该跳转到哪个索引(通过存储的类型)。

答案 1 :(得分:0)

  

但据我所知,模板metaprogrammign只能生成if,这会将boost :: variant调度放在O(n)的运行时开销上,

否:模板元编程if在编译时计算 ,因此如果开销是由模板元编程定义的,那么它将是编译时开销。然后,运行时开销将保持不变。

警告:我不知道boost::variant派遣是如何运作的。但是如果它是使用编译时if实现的,它的行为将如上所述。