zoukankan      html  css  js  c++  java
  • C++ 模板套模板

    1.模板类中有成员是模板

    #include <iostream>
    #include <typeinfo>
    using namespace std;
    
    template<class T>
    class Outer 
    {
    public:
      template<class R>
      class Inner 
      {
      public:
        void f();
      };
    };
    
    template<class T> 
    template <class R>
    void Outer<T>::Inner<R>::f()
    {
      cout << "Outer == " << typeid(T).name() << endl;
      cout << "Inner == " << typeid(R).name() << endl;
      cout << "Full Inner == " << typeid(*this).name() << endl;
    }
    
    int main() 
    {
      Outer<int>::Inner<bool> inner;
      inner.f();
    } /**////:~
    
    //output:
    //Outer == int
    //Inner == bool
    //Full Inner == class Outer<int>::Inner<bool>
    //Press any key to continue . . .
    

      2、模板类参数是模板

    // A print function for standard C++ sequences
    #include <iostream>
    #include <list>
    #include <memory>
    #include <vector>
    #include <deque>
    using namespace std;
    
    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;
    }
    
    int main() 
    {
      // Process a vector
      vector<int> v;
      v.push_back(1);
      v.push_back(2);
      printSeq(v);
      // Process a list
      list<int> lst;
      lst.push_back(3);
      lst.push_back(4);
      printSeq(lst);
    
      // Process a deque
      deque<int> d;
      d.push_back(5);
      d.push_back(6);
      printSeq(d);
    } /**////:~
    

      注意:typename 通知编译器被限定的标识符应该为类型,不同与typedef 是定义新的类型。

    原文地址

  • 相关阅读:
    开启linux服务器防火墙
    Linux系统编程11_管道和命名管道
    Lua语法
    Git学习
    Buildroot介绍
    Makefile基本介绍
    页、页表和块
    文件系统,根文件系统,MTD
    什么是ioctl
    bootargs的mtdparts解析
  • 原文地址:https://www.cnblogs.com/linlf03/p/2257148.html
Copyright © 2011-2022 走看看