zoukankan      html  css  js  c++  java
  • 我理解的 C++ 参数推导

    今天在看 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<int, double>(22, 9.8) ,但系统为我们自动进行了匹配。那么我认为参数推导也是一样。看下面的例子:

     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的类型)。

    以上只是我个人的理解,或许有些不对,但我希望对知识有一个自己通俗的理解。

  • 相关阅读:
    dgango
    django
    pymysql 增删改 查 索引
    mysql 单表,多表,符合条件,子查询
    mysql 数据的增删改
    mysql foreignkey
    mysql基础知识之数据类型与约束
    MySol序
    MySql
    Python Selenium 常用方法总结
  • 原文地址:https://www.cnblogs.com/hengli/p/2560155.html
Copyright © 2011-2022 走看看