在 boost::variant 上调度的效率如何?
如果它是一个 switch 语句,它应该只需要 O(1) 时间,但据我所知,模板元程序只能生成 if's,这将使 boost::variant 调度的运行时开销为 O(n),其中 n = 变体中的类型数。
任何人都可以确认/否认/启发我吗?
谢谢!
看源头,应该是常数时间。Boost 使用 Boost.PreProcessor 生成一个切换表,并跟踪它应该跳转到哪个索引(通过存储的类型)。
但据我所知,模板元程序只能生成 if,这会将 boost::variant 调度置于 O(n) 的运行时开销,
否:模板元编程是在编译时if
评估的,因此如果开销是由模板元编程定义的,那么它将是编译时开销。运行时开销将是恒定的。
警告:我不知道boost::variant
调度是如何工作的。但如果它是使用 compile-time 实现的if
,它的行为将如上所述。