代码之家  ›  专栏  ›  技术社区  ›  iBug

专门化模板类?

  •  4
  • iBug  · 技术社区  · 8 年前

    我试图编写一个程序,在没有循环或递归函数调用的情况下输出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 回复  |  直到 8 年前
        1
  •  3
  •   sehe    8 年前

    专门化类模板本身:

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