首页 > 技术文章 > 迭代器相应型别

huhuuu 2013-12-10 14:13 原文

  引子:在算法运用迭代器的时候,很可能用到起相应型别(即迭代器所指之物的型别),但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源码剖析

推荐阅读