模板元编程示例没有意义

时间:2014-08-08 21:25:36

标签: c++ templates c++11 template-meta-programming

我正在看一个通过模板元编程循环展开的例子:

template<int i, typename FuncType>
class Loop
{
    public:
        static inline void Do(FuncType func) {
            Loop<i-1, FuncType>::Do(func);
            func(i);
        }
};

template<typename FuncType>
class Loop<-1, FuncType>
{
    public:
        static inline void Do(FuncType func) { }
};


void DoWork(int i) { cout << “DoWork(“ << i << “)” << endl; }
int main()
{
    Loop<3, decltype(DoWork)>::Do(DoWork);
}

我不明白为什么第一个模板类在与Class Loop相同的行上没有任何模板参数,但是在循环结束时要处理的模板类是:

class Loop<-1, FuncType>

我希望两者都有相同的声明,除了第二个部分特化与-1的情况。

1 个答案:

答案 0 :(得分:1)

语法不同的原因是第一个template语句声明了一般模板,而第二个声明了此模板的partial specialization。参数

<-1, FuncType>

在类名后面描述了应该使用这种专门化的条件 - 在这种情况下,第一个参数是-1