zoukankan      html  css  js  c++  java
  • C++中的模板(函数模板,类模板)

    1.模板是生成类或函数的框架,模板使用形参,当实际数据类型赋值给形参的时候,才由编译器生成类或函数

    2.函数模板的声明由关键字template和包含一个或多个数据类型形参的参数列表构成,形参数据类型(T)前面可以是class也可以是typename,类型形参T要用尖括号<>括起来:

    Template <typename T>或Template<classT>

    3.函数模板的调用

    #include "stdafx.h"

    #include<stdio.h>

    template <class T>

    T max(T a,T b)

    {

        returna>b?a:b;

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

        printf("%d ",max(3,10));//更ü完�?善?写′法ぁ�ax<int>(3,10)

        printf("%f ",max<double>(21.3,20.1));

        return 0;

    }

    4.用作模板的类型可以是基本类型,也可以是一个类,类似于函数模板的做法,类模板对成员数据和成员函数的参数类型进行泛化,下面是一个模板类A,构造函数和comp函数均在模板声明中定义,成为内联函数,print_Type函数在模板外定义,需要用关键字template说明T1和T2是模板类型,并以A<T1,T2>::做函数的前缀作用域

    //templae2.cpp : 定¨义?控?制?台�?应畖用?程ì序ò的?入?口ú点?。£

    //

    #include "stdafx.h"

    #include <stdio.h>

    #include <typeinfo.h>

    template <class T1,class T2>

    class A{

        T1 i;

        T2 j;//

    public:

        A(T1 t1,T2 t2){i=t1;j=t2;}//内联函数

        bool comp(){return i>j;}//内联函数

        voidprint_Type();//函数声明

    };

    //成员函数printf_type定义

    template <class T1,class T2>

    voidA<T1,T2>::print_Type(){

        printf("i的类型是%s ",typeid(i).name());//打印i的类型名

        printf("j的类型是?%s " typeid(j).name());

    }

    int _tmain(int argc, _TCHAR* argv[])

    {   A<int,double> a(3,89.2);

        if(a.comp())

        {

            printf("i>j ");

        }

        else printf("i<=j ");

        a.print_Type();

        return 0;

    }

    5.当模板的泛化处理不适合某个特定的数据类型时,可针对这个数据类型给出相应的模板,包括函数模板特化和类模板特化(叫完全特化技术也叫精确特化)

  • 相关阅读:
    Feature hashing相关
    损失函数(Loss Function) -1
    Android系统容量检测 —— Environment 和StatFs
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android中listview的一些样式设置
    Android代码调试报错
    珍藏40个android应用源码分享
    Android应用中菜单(Menu)的位置显示问题
    解决android4.0系统中菜单(Menu)添加Icon无效问题
    android自定义title
  • 原文地址:https://www.cnblogs.com/zhangaihua/p/3718093.html
Copyright © 2011-2022 走看看