微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

理解可变参数模板中的类参数包

如何解决理解可变参数模板中的类参数包

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 举报,一经查实,本站将立刻删除。