如何解决理解可变参数模板中的类参数包
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 举报,一经查实,本站将立刻删除。