【发布时间】:2011-08-30 18:05:18
【问题描述】:
这是我在可变参数模板中的第一个代码:
void print_f()
{
}
template<typename T, typename ... ARG>
void print_f(const T& a, ARG... C)
{
std::cout<<a;
print_f(C...); // -> at this line I want to know
std::cout<<std::endl;
}
当我递归调用 print_f(C...); 时,实际发生了什么?我的意思是
模板参数包C被解包,可变参数模板中函数参数推导是如何完成的,匹配是如何完成的?
谁能解释一些基础知识?
编辑:通常在模板类中
template <typename T> class x{
public:
T aa; // can declare variable of type T
};
但在可变参数模板中:
template<typename T, typename ... ARG>
void print_f(const T& a /* , ARG... C -> if remove this */ )
{
std::cout<<a;
ARG... C // and put it here , we can't do this, why?
print_f(C...);
std::cout<<std::endl;
}
【问题讨论】: