zoukankan      html  css  js  c++  java
  • 模板

    1.模板函数(模板类的成员函数)只有在被使用的时候才会被实例化。在实例化之前也只会进行有限的错误检查。
        这样子有两个好处:
         1.换来时间和空间效率,可以省去无用函数编译时间和编译生成代码所占用存储。
         2.(模板类的成员函数)可以规避掉某些场景下的编译错误。某模板类在场景1下用到且只用到成员函数f1和f2,场景2下用到且只用到成员函数f2和 f3。而f3在场景1下有可能由于功能局限实例化后语法错误,此时选择性的在场景1下不对f3实例化则可以确保该模板类在两种场景下的通用型。

    2.可以将模板参数类型作为当前模板类的基类。

    3.模板类不能支持参数数目不同但多个同名(这个原因不明),但是模板函数是可以支持的。

       即如下声明是不可以的

    template<typename _T> struct Debug {
        _T _a;
        Debug(_T a) : _a(a) {}
        void debug(std::string s) { cout<<_a<<s; }
    };
    template<typename _T, typename _T1> struct Debug {
        _T _a;
        _T1 _b;
        Debug(_T a, _T1 b) : _a(a), _b(b) {}
        void debug(std::string s) { cout<<_a<<_b<<s; }
    };

    4.模板的特化

      模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。

    5.模板类本身可作为模板参数 

    template<class IT>
    inline std::string ToString4SeqFlat(const IT & pIt, const IT & pEnd, int iMaxNum = INT_MAX)
    {
        std::string tmpString;
        bool bFirst = true;
        IT pSeqIt = pIt;
        for(int i = 0; (pEnd != pSeqIt) && (i < iMaxNum); ++pSeqIt, ++i)
        {
            if(bFirst)
            {
                bFirst = false;
            }
            else
            {
                tmpString += ",";
            }
            tmpString += ToString(*pSeqIt);
        }
        return tmpString;
    }
    
    template<class T, template<typename> class A/*allocator*/, template<typename, class> class SEQ/*container*/>
    inline std::string ToString4SeqFlat(const SEQ<T, A<T> > & seq, int iMaxNum = INT_MAX)
    {
        std::string tmpString;
        tmpString += "{seq(" + ToString(seq.size()) + "):";
        tmpString += ToString4SeqFlat(seq.begin(), seq.end(), iMaxNum);
        tmpString += "}";
        return tmpString;
    }
  • 相关阅读:
    Linux HugePages及MySQL 大页配置
    tcp短连接TIME_WAIT问题解决方法大全
    从问题看本质: 研究TCP close_wait的内幕
    tcp_tw_recycle和tcp_timestamps的文章汇总
    MYSQL博客
    Tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
    net.ipv4.tcp_tw_recycle
    TIME-WAIT和CLOSE-WAIT
    mysql 源码调试方法
    mysqldump 备份原理9
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/cpp_template.html
Copyright © 2011-2022 走看看