调度boost :: variant的效率如何?
如果它是一个switch语句,它应该只花费O(1)时间,但据我所知,模板元程序设计只能生成if,这会将boost :: variant调度放在O(n)的运行时开销上,其中n =变体中的类型数。
有人可以确认/否认/启发我吗?
谢谢!
答案 0 :(得分:4)
看看来源,它应该是恒定的时间。 Boost使用Boost.PreProcessor生成一个switch-table,并跟踪它应该跳转到哪个索引(通过存储的类型)。
答案 1 :(得分:0)
但据我所知,模板metaprogrammign只能生成if,这会将boost :: variant调度放在O(n)的运行时开销上,
否:模板元编程if
在编译时计算 ,因此如果开销是由模板元编程定义的,那么它将是编译时开销。然后,运行时开销将保持不变。
警告:我不知道boost::variant
派遣是如何运作的。但是如果它是使用编译时if
实现的,它的行为将如上所述。