Boost 变体类型上的调度需要线性时间吗?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看源码,应该是常数时间。 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).
否:模板元编程
if
被评估 在编译时,因此如果开销是由模板元编程定义的,那么它将是编译时开销。运行时开销将保持不变。警告:我不知道 boost::variant 调度是如何工作的。但是如果它是使用编译时
if
实现的,它的行为将如上所述。No: template metaprogramming
if
s 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-timeif
, it will behave as described above.