24 lines
664 B
C++
24 lines
664 B
C++
#pragma once
|
|
#include <cstddef>
|
|
#include <tuple>
|
|
#include <utility>
|
|
|
|
namespace kpn::tmp {
|
|
|
|
// repeat_tuple_t<T, N> — std::tuple<T, T, ..., T> with N elements.
|
|
// Used by FanoutNode and fanout_groups to express N homogeneous outputs.
|
|
|
|
template<typename T, std::size_t N, typename Seq = std::make_index_sequence<N>>
|
|
struct repeat_tuple;
|
|
|
|
template<typename T, std::size_t N, std::size_t... Is>
|
|
struct repeat_tuple<T, N, std::index_sequence<Is...>> {
|
|
template<std::size_t> using always_T = T;
|
|
using type = std::tuple<always_T<Is>...>;
|
|
};
|
|
|
|
template<typename T, std::size_t N>
|
|
using repeat_tuple_t = typename repeat_tuple<T, N>::type;
|
|
|
|
} // namespace kpn::tmp
|