【问题标题】:Boost mpl::vector and hana提升 mpl::vector 和 hana
【发布时间】:2017-01-05 14:43:09
【问题描述】:

我正在搜索某种元向量/链表。似乎 mpl::vector 是最好的方法。但现在有了hana。不幸的是,我找不到某种 hana::vector。我看到了一个用于 mpl::vector 的适配器,仅此而已。所以这意味着 mpl::vector 仍然是最好的做事方式?

Hana 的编译速度非常快,所以我想:那为什么不呢?但是mpl没那么快,真的需要自己写mpl::vector吗?

【问题讨论】:

  • 为什么hana::tuple 不适合你?
  • mpl::* 东西很老了,它是 C++11 之前的。例如,与现在相比,通过简单的参数包扩展完成的很多事情仍然是通过mpl 中的递归模板完成的。它将比现代代码慢得多。是的,在 C++14 中编码 vector 是小菜一碟,如果 mpl::vector 不满意,可以轻松完成。

标签: c++ metaprogramming boost-mpl boost-hana


【解决方案1】:

如果您需要的是类型/值的异构“列表”,boost::hana::tuple 应该是 mpl::vector 的一个足够好的替代品。

您可以使用boost::hana::at 访问特定索引中的项目,使用boost::hana::append 附加项目,使用boost::hana::remove 删除它们等等。

即使与mpl::vector 的接口没有一对一的对应关系,考虑到上述原语,实现一些实用功能也应该是微不足道的。


如果你需要一个类型列表,你应该使用boost::hana::tuple_t,它是hana::tuple(hana::type_c<Types>...) 的语法糖。

【讨论】:

  • mpl::vector 是类型列表,而不是值。它不同于hana::tuple
  • boost::hana 中,类型是值——这是库的核心原则。例如。 hana::make_tuple(hana::type_c<int>, hana::type_c<float>)
  • 似乎没有其他选择:) 现在我将检查 std::tuple 是否不足以使用 C++17。谢谢
  • FWIW,hana::tuple 将比std::tuple 更快地编译很多,因为符合标准的元组实现需要有很多疯狂的构造函数。除非您真的需要 std::tuple 的全部灵活性(如分配器构造函数),否则您可能希望坚持使用 hana::tuple
  • 好吧,我只需要尽可能少的依赖,所以我要检查 std::tuple 是否足够(速度包括),然后选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多