2017-09-18 151 views
4

我试图写一个程序,输出1〜1000无循环或递归函数调用,我想出这个专门设计一个模板类?

#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?

回答

3

专营类模板本身:

template <int N> 
class NumberGenerator : public NumberGenerator<N-1>{ 
    public: 
    NumberGenerator(); 
}; 

template <> 
class NumberGenerator<1> { 
    public: 
    NumberGenerator(); 
}; 
+0

我是否可以使用其他功能在'NG <1>'的非专门类?即是否无效NG :: foo()'cover' NG <1>'? – iBug

+0

呃。希望这可以帮助? http://coliru.stacked-crooked.com/a/dabc1b56b56e3848 – sehe

+0

不,您将无法使用其他功能。要停止链,你必须删除基类。除了1.模板元编程(祝你好运)之外没有办法2.专门化类模板 – sehe