1

Boost Hana 似乎没有记录图书馆的这一方面,所以我想知道我在做什么至少是合法的。

我已经开始在我的代码中添加一堆概念,我不得不使用一些 hana 概念。有一个例子:

#include <boost/hana.hpp>

namespace hana = boost::hana;

template < typename T >
concept bool C_Type = requires(T object) {
    typename decltype(object)::type;
};

template < typename T >
concept bool C_Functor = hana::Functor<T>::value;

constexpr decltype(auto)  applySignatureOn(auto storageSig,
                                           C_Functor innerTypes) {
    return hana::transform(
          innerTypes,
          [=] (C_Type type)
          { return hana::make_pair(
              hana::make_tuple(type),
              storageSig(type));
          });
  }

像这样为 Boost Hana Functor 概念制作“别名”可以吗?或者它可以随时改变?

顺便说一句,错误并不十分精确。可能是因为 Hana 使用的是 C++14 并且不能使用概念。但是有没有计划有一天升级到 C++20?

4

1 回答 1

3

Boost Hana 似乎没有记录图书馆的这一方面,所以我想知道我在做什么至少是合法的。

Hana在这里记录了它的概念仿真。

像这样为 Boost Hana Functor 概念制作“别名”可以吗?

是的,没关系。文档定义它意味着在 Hana 中是一个概念,然后它说Functor是一个概念。您正在使用所有记录在案的东西,因此它是安全的,并且在 Hana 做出重大更改之前它不会中断。

可能是因为 Hana 使用的是 C++14 并且不能使用概念。但是有没有计划有一天升级到 C++20?

正如你所说,Hana 没有使用“C++ 概念”,因为它是一个 C++14 库,而我们喜欢称之为“C++ 概念”的东西还不是任何已发布的语言规范的一部分。Hana 可能会在语言发布后开始使用 C++20 概念,我们拭目以待。但是,它必须带来重大改进,因为它是对用户编译器要求的重大改变。

于 2017-09-04T16:40:28.310 回答