zoukankan      html  css  js  c++  java
  • [C++再学习系列] 模板函数的自定义点

    模板函数 :

    在编写模板时 , 可以通过一些显示的自定义 , 对模板参数类型做一些必要的限制 :

    选择 1: 模板直接依赖于类型具有给定名字的合适的成员函数 , 则显式要求参数T提供该成员函数 .

    选择 2: 模板依赖于 类型具有给定名字的合适的非成员函数 ”, 则显式的要求T 具有给定名字 / 签名和语义的非成员函数 .

    选择 3: 模板依赖于 类型已经特化 ( 如果必要 ) 另一个模板 ”, 则需要被特化的模板提供一个 ( 通常是静态类成员 ) 具有给定名字 / 签名和语义的函数 .

    Template<typename T>

    Void Sample1(T t){

    t.foo();       // 选择 1, foo()T 的成员函数 .

    foo(t);        // 选择 2, foo() 是和类型 T 一起提供的非成员函数 ( 属于同一个名字空间 )

    S3Traits<T>::foo(t);  // 选择 3, foo() 是静态类成员

    }

    避免无意的自定义点 :

    选择 1 将模板中的任何辅助函数都放在其自己内嵌的名字空间中 (名字空间包括名字空间 + 类名 (静态函数))

    选择 2 在引用基类的任何成员函数时 , 显式的使用基类名或者 this-> 进行限定 .

    Template<typename T>

    class X<T>{

    public:

    void f()

    {

    X<T>::baz();   // 通过类名进行限定

    T::baz();          // 通过类名进行限定

    This->baz();    //this 指针

    Hepler::baz();   // 这里 hepler 可以是名字空间 , 也可以是类名

    }

          }

           为模板函数提供显式的自定义点,或避免无意的自定义点,其本质都是 C++ 名字查找规则,就是利用 C++ 的名字查找规则促进有意的名字查找,并避免无意的名字查找。

    ---------------------------------------------------

    兄弟的公司:立即购--手机购物,诚信网购

    兄弟的公司:立即团

    欢迎转载,请注明作者和出处

  • 相关阅读:
    路由系统
    快速入门
    IIS7.0下 HTTP 错误 404.15
    关于:TypeConverter 无法从 System.String 转换
    mssql批量刷新多个表的数据
    aspxpivotgrid排序
    .net面试题
    AspxGridView在cell内显示颜色
    AspxGridView 表中的ASPxHyperLink不导出到excel
    C# 网络编程小计 20150202
  • 原文地址:https://www.cnblogs.com/zhenjing/p/template_function.html
Copyright © 2011-2022 走看看