2
N
을 std::size_t
유형의 템플릿 매개 변수로 설정하십시오. 나는 두 가지 방법으로 내 클래스의 생성자를 호출 할 수 싶습니다 :Variadic 인수 (팩 크기 N) 및 기본 인수
A a(x1, x2, x3, ..., xN)
및
A a(x1, x2, x3, ..., xN, xN1)
xi
변수는 같은 유형의 모든 곳. 내 첫 번째 생각은 다음과 같습니다.
template <std::size_t N>
struct A
{
template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
A(Args ...args) {
f(args...); // where f is some function
}
template <typename ...Args, typename = typename std::enable_if<N+1 == sizeof...(Args), void>::type>
A(Args ...args) {
// run f on the first N arguments
// run g on the last argument (selection is done using templates, I just did not want to write the code)
}
};
이 기술에 대한 설명은 Variadic templates with exactly n parameters입니다. 물론이 문제는 생성자에 이런 식으로 오버로드 할 수 없다는 것입니다.
아이디어가 있으십니까?
차이점을 설명해 주시겠습니까? – 0x499602D2
@ 0x499602D2 OP에있는 것과 동일한 함수 템플릿이 다른 기본 인수로 다시 정의됩니다. 서명의'enable_if' 부분을 만드는 것은이 두가지 별개의 함수 템플릿을 만듭니다. –
SFINAE에서 이전 버전을 사용해야합니까? – 0x499602D2