使用/在printSeq实现中理解模板(... class = allocator ...)

时间:2014-08-08 15:39:23

标签: c++ templates stl

我正在学习C ++模板。 (我所知道的是我阅读this survey的第1部分和第2部分)

Haven没有详细了解STL中的容器。但是我的名单中有下一个。

我试图理解模板函数的以下定义来打印序列的元素。

 template<class T, template<class U, class = allocator<U>> class Seq>
 void printSeq(Seq<T>& seq) {
    for (typename Seq<T>::iterator b = seq.begin(); b != seq.end();)
        cout << *b++ << endl;
 };

我的问题出在第一行。我认为我明白了:

  1. 有模板子句template< type1 , type2 >type1class T,这个类将在定义的其余部分用名称T标识。

  2. type2template<class U, class = allocator<U>> class Seq

  3. type2也是模板类。这就是他们使用template<...> class Seq

  4. 的原因
  5. template<class U, class = allocator<U>>我们再次提供template< type 3, type4>表格。此处type3class U,是一个名称为U的类。

  6. 我不理解的部分是class = allocator<U>。我想编译器首先会知道U的实际类型,它可以实现&#39;实例化&#39; (这是正确的术语吗?)模板allocator获取类型allocator<U>(!?)。但是有=

    问题:

    1. = allocator<U>返回某个类型是否正确?
    2. =如何在这个结构中工作?
    3. 我的问题似乎更多地是关于allocator。我在哪里可以读到我错过的内容?我正在阅读this,但我仍然不了解=的作用。

0 个答案:

没有答案