zoukankan      html  css  js  c++  java
  • 迭代器相应型别

      引子:在算法运用迭代器的时候,很可能用到起相应型别(即迭代器所指之物的型别),但C++支持sizeof ,并无typeof。

      可以利用function template的参数推导机制。

    1.函数参数的情况

    #include<iostream>
    using namespace std;
    
    template <class I,class T>
    void func_impl(I iter,T t){
        T tmp;//这里解决了问题,T就是迭代器所指之物的类型
      //………… } template
    <class I> void func(I iter){ func_impl(iter,*iter); } int main() { int i; func(&i); }

    显然上述的方法无法判断函数返回值类型的情况

    2.函数返回值的情况

    #include<iostream>
    using namespace std;
    
    template <class T>
    class MyIter{
    public:
        typedef T value_type;
        T* ptr;
        MyIter(T* p=0):ptr(p){}
        T& operator*()const{
            return *ptr;
        }
    };
    
    template <class I>
    typename I::value_type//I::value_type编译器不知道代表一个型别或是一个成员函数或是一个数据成员,关键词typename用以告诉编译器这是一个型别
    func(I ite){
        return *ite;
    }
    
    int main(){
        MyIter<int> ite(new int(8));
        cout<<func(ite);
    }

    ~~~~~~~~~~~~~占个坑等下再改

    参考:STL源码剖析

  • 相关阅读:
    CCDictionary 用调试器查看问题
    博客 小记
    cocos2d-x 调试问题
    string知识
    静动态库
    fedora 20安装vim Transaction check error
    PyQt中ui编译成窗体.py,中文乱码
    centos编译安装vim7.4
    linux c驴杂记
    c++指针 c指针 改变值
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3467342.html
Copyright © 2011-2022 走看看