을 @Smeeheey의 대답에서 내가 물어 본 다른 질문에 대한 아이디어를 재활용하십시오. C++ parameter pack, constrained to have instances of a single type?
연결이 문제가되지 않았습니다. 실제로는
여러 번 반복되는 동일한 유형의 매개 변수 팩을 만들려면 어떻게해야합니까?
그리고 가장 간단한 대답은은, std::make_index_sequence
사용하고 팩 확장 :
#include <tuple>
#include <utility>
template <typename T, unsigned n>
struct repeat_tuple {
template <unsigned>
struct blah {
using type = T;
};
template <typename IS>
struct helper;
template <unsigned ... Is>
struct helper<std::integer_sequence<unsigned, Is...>> {
using type = std::tuple<typename blah<Is>::type...>;
};
using type = typename helper<std::make_integer_sequence<unsigned, n>>::type;
};
template <typename T, unsigned n>
using repeat_tuple_t = typename repeat_tuple<T, n>::type;
static_assert(std::is_same<repeat_tuple_t<int, 3>, std::tuple<int, int, int>>::value, "");
int main() {}
이 궁극적으로 W.F.의 대답과 같은,하지만 어쩌면 조금 terser이다. 편집 : 그는 그의 대답에 C + + 14 특성을 backporting 것 같아요.
이 접근법은 tuple_cat
접근 방식과 달리 튜플 외의 다른 것들에도 적용됩니다.
실제로 여기 std::tuple
템플릿 템플릿 매개 변수가 될 수 있습니다 ...
: 악의적 눈 :
튜플은 일반적으로 * 다른 * 유형의 정렬 된 컬렉션을 원할 때 선택됩니다. 배열은 N foos이며, 터미널 케이스가 1 대신 0 일 때 –
Caleth