Boost 变体类型上的调度需要线性时间吗?

发布于 2024-08-19 16:33:04 字数 176 浏览 3 评论 0原文

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

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

有人能证实/否认/启发我吗?

谢谢!

How efficient is dispatching on a boost::variant ?

If it's a switch statement, it should only take O(1) time, but as far as I know, template metaprogrammign can only generate if's, which would put boost::variant dispatchs at a runtime overhead of O(n), where n = number of types in the variant.

Can anyone confirm/deny/enlighten me on this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕梦 2024-08-26 16:33:04

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

Looking at the source, it should be constant time. Boost uses Boost.PreProcessor to generate a switch-table, and keeps track of which index it should jump to (via the type being stored).

疑心病 2024-08-26 16:33:04

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

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

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

but as far as I know, template metaprogrammign can only generate if's, which would put boost::variant dispatchs at a runtime overhead of O(n),

No: template metaprogramming ifs are evaluated at compile time so if the overhead is defined by template metaprogramming, it will be a compile time overhead. Runtime overhead will then be constant.

Caveat: I do not know how boost::variant dispatch works. But if it’s implemented using compile-time if, it will behave as described above.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文