gpt4 book ai didi

c++ - 递减折叠表达式内的模板参数

转载 作者:行者123 更新时间:2023-12-02 02:43:54 24 4
gpt4 key购买 nike

考虑以下代码:

template<typename...>
struct C
{ /* ... */ };

template<typename T, unsigned N>
struct B
{
using type = /* ... */;
};

template<size_t N, typename... Ts>
struct A
{
using type = C<typename B<Ts, N-->::type...>; // decrement N sizeof...(Ts) times
};

举个例子

typename A<5, int, long, void>::type

扩展为

C<typename B<int, 5>::type, typename B<long, 4>::type, typename B<void, 3>::type>

由于 N 是一个 const 值,因此该代码无法编译。还有其他办法吗?

最佳答案

减去 std::index_sequence来自N

namespace detail {
template<size_t N, typename... Ts, size_t... Is>
C<typename B<Ts, N - Is>::type...> A_impl(std::index_sequence<Is...>);
}

template<size_t N, typename... Ts>
struct A
{
using type = decltype(detail::A_impl<N, Ts...>(std::index_sequence_for<Ts...>{}));
};

关于c++ - 递减折叠表达式内的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59668098/

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