我正在看一个通过模板元编程循环展开的例子:
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的情况。
答案 0 :(得分:1)
语法不同的原因是第一个template
语句声明了一般模板,而第二个声明了此模板的partial specialization。参数
<-1, FuncType>
在类名后面描述了应该使用这种专门化的条件 - 在这种情况下,第一个参数是-1
。