我目前正在关注SDL2上的this tutorial,并且遇到了模板,这对我来说是全新的。
template<typename T, typename... Args>
void cleanup(T *t, Args&&... args){
cleanup(t);
cleanup(std::forward<Args>(args)...);
}
template<> inline void cleanup<SDL_Window>(SDL_Window *window){
...
}
...
我不明白如何在cleanup()
函数中调用cleanup()
不仅会创建无穷的递归循环,还会调用下面的专用模板函数之一。另外,对于forward()
调用a
来说没有太大意义,但对于b
而言,我没有多大意义,至于我收集到的信息,forward()
应该可以解决所有问题cleanup()
带有左值和右值。
答案 0 :(得分:2)
cleanup(T *a, Vars&&... b)
如果您将n
vars传递给此函数,则第一个函数将到达主体中的第一个函数(结束)。请注意,没有内部调用。
其余的n-1
将转到正文中的第二个函数,这将再次调用一个函数,但要使用n-1
vars。
此过程将一直持续到只有两个参数,然后第一次和第二次调用都将使用第二个函数,因为这将是最佳匹配。
因此,这不是无止境的功能。