C++ 2011 코드에서 까다로운 일이 필요합니다. 현재, 내가 이런 종류의 metafunction 있습니다부호없는 int의 가변 템플릿을 재귀 적으로 작성하십시오.
template<unsigned int N, unsigned int M>
static constexpr unsigned int myFunction()
이 기능은 수 N
와 M
에 따라 생성 할 수 있습니다.
입력 N
과 M
으로 메타 기능을 작성하고 싶습니다.이 템플릿은 M
을 감소시켜 가변적 인 템플릿을 재귀 적으로 생성합니다.
List... = myFunction<N, 3>, myFunction<N, 2>, myFunction<N, 1>, myFunction<N, 0>
방법 (이것은 물론 가능하다면) 그 작업을 수행하는 예를 들어, M = 3
이 함수를 호출하여, 그것은 동일한 List
라는 가변 인자 템플릿을 만들 것인가?
template<int N, int M, typename T> struct foo_impl {};
template<int N, int M, int... I> struct foo_impl<N, M, tuple_pack<I...>> {
static void foo() {
int arr[M] = { myFunction<N, M - I>()... };
}
};
template<int N, int M> void foo() {
foo_impl<N, M, typename make_tuple_pack<M>::type>::foo();
}
원하는 경우 함수 매개 변수 추론 :
// Idiomatic tuple pack generator using successor method
template<int... I> struct tuple_pack {
using succ = tuple_pack<I..., sizeof...(I)>;
};
template<int N> struct make_tuple_pack {
using type = typename make_tuple_pack<N - 1>::type::succ;
};
template<> struct make_tuple_pack<0> {
using type = tuple_pack<>;
};
지금 우리가 구현 기능에 위임, 튜플 팩 생성기를 적용 할 수 있습니다
목록의 유형은 무엇입니까? –
목록은 서명되지 않은 int 목록입니다 – Vincent
유스 케이스를 말할 때 즉 사용 방법을 말할 때 더 좋습니다. 또한 단순히 함수 이름'myFunction'은 괄호 없이는 아무 것도 의미하지 않습니다. 사용 사례가있는 좀 더 정교한 예제가 도움이 될 것입니다. –