C/C++培训
达内IT学院
400-996-5531
引子:在算法运用迭代器的时候,很可能用到起相应型别(即迭代器所指之物的型别),但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);
}
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved