zoukankan      html  css  js  c++  java
  • template

    template

     1、当定义template的时候,并没有生成实例,当使用一个模板的时候才会生成一个实例。

     2、模板的编译:

      1)在实例化之前,先检查模板代码本身,查看是否有语法错误,如遗漏分号。

      2)在实例化期间,检查模板代码,看是否所有的调用都有效,如类型匹配。

     3、自定义类型会优先于参数类型推测而生成实例。注意:模板推测只应用于函数模板,类模板必须指定类型

     4、由于模板的2次编译性,当使用一个类方法模板时,需要先检测函数模板本身,再检测类型是否匹配,所以类函数模板必须放置在头文件中,或者放置在inl文件中。

     5、当模板待生成的类型已存在时,则模板不会实例化,而会使用已有类型。

     6、模板特化:

      1)全特化(指定所有模板参数):

        

      2)局部特化(指定几个模板参数):

           

     7、typename,如果不使用typename,则下图代码的T::SubType会被compile认为是静态变量乘以ptr:

      

     8、受限名称 & 依赖名称:

      

     9、模板嵌套

      

     10、非依赖类型不会在依赖类型的基类中查找,因为依赖类型只有在实例化时才会进行名字查找。所以如下代码中,basefield变量会找不到:

      

       解决的方案是,证basefield也变为依赖类型,使用this或者 Base<T>::basefield。

  • 相关阅读:
    ES6 Set.Map.Symbol数据结构
    ES6 class类 静态方法及类的继承
    ES6 浅谈Reflect
    ES6 proxy代理详解及用法
    Vue之生命周期函数
    Vue之自定义键盘修饰符、自定义指令
    v-show和v-if区别
    迭代器iterator
    es6之Proxy代理
    es6之symbol数据类型
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3307041.html
Copyright © 2011-2022 走看看