C++ 促进Hana概念的实现

C++ 促进Hana概念的实现,c++,metaprogramming,c++-concepts,boost-hana,c++20,C++,Metaprogramming,C++ Concepts,Boost Hana,C++20,Boost Hana似乎没有记录库的这一方面,所以我想知道我所做的至少是合法的 我已经开始在我的代码中添加一些概念,我不得不使用一些hana概念。有一个例子: #include <boost/hana.hpp> namespace hana = boost::hana; template < typename T > concept bool C_Type = requires(T object) { typename decltype(object)::ty

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));
          });
  }
#包括
名称空间hana=boost::hana;
模板
概念布尔C_类型=需要(T对象){
typename decltype(对象)::类型;
};
模板
概念布尔C_函子=hana::函子::值;
constexpr decltype(自动)applysignatorion(自动存储信号),
C_函子(内部类型){
返回hana::transform(
内部类型,
[=](C_类型)
{return hana::make_pair(
hana::生成元组(类型),
storageSig(型);
});
}
把Boost-Hana函子概念做成这样的“别名”可以吗?或者是随时都可能改变的东西

顺便说一下,误差并不是很精确。可能是因为Hana正在使用C++14,无法使用概念。但是有没有计划有一天升级到C++20

Boost Hana似乎没有记录库的这一方面,所以我想知道我所做的至少是合法的

Hana记录了其对概念的模拟

把Boost-Hana函子概念做成这样的“别名”可以吗

是的,没关系。文档定义它在Hana中是一个概念,然后它说
Functor
是一个概念。您使用的东西都有文档记录,因此它是安全的,在Hana做出突破性的更改之前,它不会中断

可能是因为Hana正在使用C++14,无法使用概念。但是有没有计划有一天升级到C++20


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

对此我感到抱歉,我不知道为什么,我确实记得看到过这个页面。。。我想我很难在文档中找到东西。不管怎样,谢谢你做的那些疯狂的事情:)不用担心。这个问题确实有助于澄清Hana的概念在多大程度上是其API的一部分。答案是,就像官方记录的所有其他内容一样,您应该能够在给定的主要版本中可靠地使用它们。