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