促进 Hana 概念实施

Boost Hana Concepts implementation

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 概念进行 "alias" 可以吗?或者它可以随时更改?

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

Boost Hana doesn't seems to document this aspect of the library, so I'd like to know if what I'm doing is legit at least.

Hana 记录了它对概念的模拟 here

Is that okay to make an "alias" of the Boost Hana Functor concept like that?

是的,没关系。文档中定义了在Hana中是Concept的意思,然后说Functor是一个Concept。您正在使用所有已记录在案的东西,因此它是安全的,并且在 Hana 进行重大更改之前不会损坏。

Probably because Hana is using C++14 and can't use concepts. But is there any plan to upgrade to C++20 one day?

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