将 integral_constants 元组转换为整数元组

Converting a tuple of integral_constants to a constexpr tuple of ints

本文关键字:元组 转换 整数 constants integral      更新时间:2023-10-16

>假设我有一个hana::integral_constant元组,如下所示:

auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
                                           hana::integral_constant<int,1>());

我现在正在尝试从中生成一个 constexpr 整数元组,如下所示:

constexpr auto constexpr_tuple = hana::make_tuple(0,1);

我的尝试:

#include "boost/hana.hpp"

using namespace boost;
auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
                                           hana::integral_constant<int,1>());
constexpr auto tuple = hana::transform(tuple_of_int_const,[](auto x){ return x(); });

问题是lambda的不是constexpr。所以问题是这样的:如何将 integral_constant s 的元组转换为 constexpr lambda?

注意:

我正在使用 c++14

Boost.Hana将函数value_of作为Constant概念的一部分。

#include <boost/hana.hpp>
namespace hana = boost::hana;
int main() {
  auto tuple_of_int_const = hana::make_tuple(hana::integral_constant<int,0>(),
                                             hana::integral_constant<int,1>());
  constexpr auto tuple = hana::transform(tuple_of_int_const, hana::value_of);
  static_assert(hana::make_tuple(0, 1) == tuple, "");
}

您可以创建常规模板函数:

template <typename ... Ts>
constexpr auto tuple_transform(std::tuple<Ts...>)
{
    return std::make_tuple(Ts{}()...);
}

演示