gpt4 book ai didi

c++ - 是否可以将 constexpr std::array 转换为 std::integer_sequence?

转载 作者:IT老高 更新时间:2023-10-28 23:16:09 25 4
gpt4 key购买 nike

也就是说,给定 constexpr std::array<int,2>{1,2}将它传递给会输出类型 std::integer_sequence<int, 1, 2> 的函数或辅助类?

从类型世界跳转到“constexpr value”世界似乎很容易(例如,进行反向转换),但很难或不可能进行反向转换。

最佳答案

您似乎可以在 C++17 中做到这一点,但代价是在调用站点引入 lambda:

template <size_t N, typename F, size_t... indexes>
constexpr auto make_seq_helper(F f, std::index_sequence<indexes...> is) {
return std::integer_sequence<int, std::get<indexes>(f())...>{};
}

template <typename F>
constexpr auto make_seq(F f) {
constexpr size_t N = f().size();
using indexes = std::make_index_sequence<N>;
return make_seq_helper<N>(f, indexes{});
};

调用make_seq像这样:

    constexpr std::array a{7, 15, 28};
auto x = make_seq([](){ return a; });

结果为 x类型为 std::integer_sequence<int, 7, 15, 28> .我不确定是否可以删除 lambda 使用。

关于c++ - 是否可以将 constexpr std::array 转换为 std::integer_sequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com