2017-09-18 154 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