4
내가 루프 또는 재귀 함수 호출없이 1000 (1)를 출력하는 프로그램을 작성하려고 시도하고, 나는 문제는이템플릿 클래스를 특수화 하시겠습니까?
#include <iostream>
template <int N>
class NumberGenerator : public NumberGenerator<N-1>{
public:
NumberGenerator();
};
template <int N>
NumberGenerator<N>::NumberGenerator(){
// Let it implicitly call NumberGenerator<N-1>::NumberGenerator()
std::cout << N << std::endl;
}
template <>
NumberGenerator<1>::NumberGenerator(){
// How do I stop the implicit call?
std::cout << 1 << std::endl;
}
int main(){
NumberGenerator<1000> a; // Automatically calls the constructor
return 0;
}
을 마련, 난 여전히 (NumberGenerator<1>
를 체인 호출을 멈출 수 없다 NumberGenerator<0>
에 전화를 걸었고 무한히 언더 플로우). 체인을 1시에 멈추게하려면 어떻게해야합니까?
template <int N>
class NumberGenerator : public NumberGenerator<N-1>{
public:
NumberGenerator();
};
template <>
class NumberGenerator<1> {
public:
NumberGenerator();
};
내가'NG <1>'에 특화되지 않은 클래스에서 다른 기능을 사용할 수 있습니다 : – iBug
Erm. 희망이 도움이 될까요? http://coliru.stacked-crooked.com/a/dabc1b56b56e3848 – sehe
다른 어떤 기능도 사용할 수 없습니다. 체인을 중지하려면 반드시 기본 클래스를 제거해야합니다. 템플릿 이외의 다른 방법은 없습니다. template meta 프로그래밍 (행운을 빌어 요) 2. 클래스 템플릿 전문 – sehe