将 integral_constants 的元组转换为整数的 constexpr 元组
Converting a tuple of integral_constants to a constexpr tuple of ints
假设我有一个 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
的元组转换为 constexpr lambda?
注:
我正在使用 c++14
您可以创建常规模板函数:
template <typename ... Ts>
constexpr auto tuple_transform(std::tuple<Ts...>)
{
return std::make_tuple(Ts{}()...);
}
Boost.Hana有函数value_of
as part of the 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, "");
}
假设我有一个 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
的元组转换为 constexpr lambda?
注:
我正在使用 c++14
您可以创建常规模板函数:
template <typename ... Ts>
constexpr auto tuple_transform(std::tuple<Ts...>)
{
return std::make_tuple(Ts{}()...);
}
Boost.Hana有函数value_of
as part of the 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, "");
}