今天在看 STL源码解析,正好看到迭代器所指类型,假设我们在应用中,只给出迭代器类型,而在你的函数中,需要声明一个迭代器所指的类型。怎么办?
上面的话可能读起来不太好懂。下面用例子来说明:
1 template<class T>
2 fun(T t)
在上面的代码中,你将T赋为T = int*,但是你在函数fun(T t)中,你却要声明一个int类型的变量来使用,怎么办呢?有什么办法呢?
这个时候就可以用到“参数推导”。
以我目前的理解,参数推导就是一个自动匹配的过程,例如:
1 template<class T, class I>
2 void fcout(T t, I u)
3 {
4 cout<<t - u<<endl;
5 }
6
7 fcout(22, 9.8);
上面使用fcout函数时,并没有显示指定模板中的参数,即并没有使用fcout
1 template <class I, class T>
2 void func_impl(I iter, T t)
3 {
4 T tmp;//这里要用到迭代器所指之物的类型
5 //....
6 }
7
8 template<class I>
9 void func(I iter)
10 {
11 func_impl(iter, *iter);//func的工作的全部移往func_impl
12 }
13
14 int main()
15 {
16 int i;
17 func(&i);
18 }
上面的代码中,func_impl(iter, iter) 没有显示声明模板的类型,但是编译器匹配出来了,得到I = (iter的类型),T = (iter的类型)。
以上只是我个人的理解,或许有些不对,但我希望对知识有一个自己通俗的理解。
原文链接: https://www.cnblogs.com/hengli/archive/2012/06/24/2560155.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/53355
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!