专门化一个模板类?

时间:2017-09-18 12:51:21

标签: c++ template-specialization template-classes

我正在尝试编写一个输出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?

1 个答案:

答案 0 :(得分:3)

专门化类模板本身:

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

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