zoukankan      html  css  js  c++  java
  • 模板特化

    From: http://blog.csdn.net/wuzhekai1985/article/details/6654667

    #include <iostream>
    #include <vector>
    #include <list>
    using namespace std;
    
    //萃取剂
    template<class I>
    struct Iterator_traits{
        typedef typename I::value_type value_type;
    };
    //特化 原生指针
    template<class T>
    struct Iterator_traits<T*>{
        typedef T value_type;
    };
    //特化 原生常指针
    template<class T>
    struct Iterator_traits<const T*>{
        typedef T value_type;
    };
    
    #define VALUE_TYPE(I) Iterator_traits<I>::value_type()
    
    //交换两个迭代器所指的元素
    template <class Iter1, class Iter2>
    inline void iter_swap(Iter1 a, Iter2 b) {
     _iter_swap(a, b, VALUE_TYPE(Iter1)); //VALUE_TYPE返回迭代器的值类型
    }
    //真正的交换函数
    template <class Iter1, class Iter2, class T>
    inline void _iter_swap(Iter1 a, Iter2 b, T) {
      T tmp = *a;
      *a = *b;
      *b = tmp;
    }
    //测试函数
    int main()
    {
        int a = 1, b = 2;
        iter_swap(&a,&b);
        cout<<a<<' '<<b<<endl;  //2 1
        
        list<int> l;
        l.push_back(3);
        l.push_back(4);
        iter_swap(l.begin(),++l.begin());
        cout<<*(l.begin())<<' '<<*(++l.begin())<<endl; //4 3
    
        Iterator_traits<int *>::value_type w = 5;       //特化
        Iterator_traits<const int*>::value_type  x = 6; //特化
            Iterator_traits<vector<int>::iterator>::value_type y = 7; //vector 容器
        Iterator_traits<list<int>::iterator>::value_type z = 8;   //list 容器
        cout<<w<<' '<<x<<' '<<y<<' '<<z<<endl; //5 6 7 8
        return 0;
    }
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/anit/p/3903927.html
Copyright © 2011-2022 走看看