2

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

如果它是一个 switch 语句,它应该只需要 O(1) 时间,但据我所知,模板元程序只能生成 if's,这将使 boost::variant 调度的运行时开销为 O(n),其中 n = 变体中的类型数。

任何人都可以确认/否认/启发我吗?

谢谢!

4

2 回答 2

4

看源头,应该是常数时间。Boost 使用 Boost.PreProcessor 生成一个切换表,并跟踪它应该跳转到哪个索引(通过存储的类型)。

于 2010-01-28T21:21:14.890 回答
0

但据我所知,模板元程序只能生成 if,这会将 boost::variant 调度置于 O(n) 的运行时开销,

否:模板元编程是在编译时if评估的,因此如果开销是由模板元编程定义的,那么它将是编译时开销。运行时开销将是恒定的。

警告:我不知道boost::variant调度是如何工作的。但如果它是使用 compile-time 实现的if,它的行为将如上所述。

于 2010-01-28T21:10:05.687 回答