问题描述
template <typename... T>
struct Tuple { };
template<
typename T,typename... Rest // Template parameter pack
>
class Tuple<T,Rest...> { // Class parameter pack [1]
T first;
Tuple<Rest...> rest; // Parameter pack expansion
Tuple(const T& f,const Rest& ... r)
: first(f),rest(r...) {
}
};
我很难理解为什么我们在 class Tuple<T,Rest...>
中的类名后面有尖括号它有什么作用?我是可变参数模板的新手,我将它与简单的类模板进行对比:
template <typename T>
class Array {
private:
T *ptr;
int size;
public:
Array(T arr[],int s) : ptr(arr),size(s) {}
void print() {
for (int i = 0; i < size; i++) {
std::cout << ptr[i] << " ";
}
};
};
我们不需要在类声明中有尖括号的地方。我不会写,例如,
template <typename T>
class Array<T> {
private:
T *ptr;
int size;
...
我只在初始化模板时看到类名后面的尖括号:
Array<int> arr(a,2);
class Tuple<T,Rest...>
也是模板初始化吗?
参考
[1] http://www.vishalchovatiya.com/variadic-template-cpp-implementing-unsophisticated-tuple/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)