C++进阶1模板的使用 20131010

C++中,我们自己编程虽然不会怎么使用模板,包括函数模板和类模板,但是在大型的项目开发中函数模板和类模板是非常重要的。笔者在**面试的时候忙问道过这个问题,迷迷糊糊的过了,但自己知道不是很清楚,所以整理一下。

1.函数模板的声明

函数模板可以用于创建一个通用的函数,用于支持不同类型的参数,避免因为函数的重载重复设计,他最大的特点是把函数使用的数据类型作为参数。

函数模板的声明形式:

template <typename T>

<ReturnType> <functionName> (Arguments){}

其中template是定义函数模板的关键字,template之后的<>不可以省略,而且内部的typename也是关键字可以使用class,用以说明他后面的标识符是数据类型标识符。这样在以后的这个函数中,凡是希望根据实参数据类型确定数据类型的变量都可以使用数据类型参数标识符来表述。

如何使用?直接向普通的函数那样直接调用。编译器就会生成对应的函数。也就是模板函数。

2.模板函数的生成

模板函数的数据类型参数标识符实际上是一个类型参数,使用函数模板的时候,要将这个形参实例化为确定的数据类型。将行使参数实例化的参数称之为模板函数。

同时可以声明多个参数类型,在一个函数中可以同时使用它们。

在函数模板中,可能会因为数据类型的转换而产生异常。但是函数的重载是支持参数的隐式类型转换,所以如果在定义了函数模板之后,在重载一个函数,他有着明确的参数类型,就不会出现异常了。

3.类模板

声明的格式:

template <class T>

class A{};

这样在类定义体外定义的成员函数,需要使用函数模板。

#include <iostream>

#include <string>

using namespace std;

template <typename T>

class Base{

private:

T value;

public:

Base(){

cout << "Base::constructor" << endl;

}

Base(T v){

this->value = v;

}

T getValue(){

return this->value;

}

virtual ~Base(){

cout << "Base::~Base()" << endl;

}

};

int main()

{

Base<string> b("yangtengfei");

cout << b.getValue() << endl;

Base<int> b1 (3);

cout << b1.getValue ()<< endl;

return 0;

}

追梦的飞飞

于广州中山大学20131010

HomePage: http://yangtengfei.duapp.com

C++进阶1模板的使用的更多相关文章

  1. C++ 进阶学习 ——模板

    模板和重载类似,比重载更省事 通常有两种形式:函数模板和类模板: 函数模板针对仅参数类型不同的函数: 类模板针对仅数据成员和成员函数类型不同的类. 一个简单的函数模板 template <cla ...

  2. bsgs+求数列通项——bzoj3122(进阶指南模板该进)

    /* 已知递推数列 F[i]=a*F[i-1]+b (%c) 解方程F[x]=t an+1 = b*an + c an+1 + c/(b-1) = b(an + c/(b-1)) an+1 + c/( ...

  3. 17-1 djanjo进阶-路由,视图,模板

    一 路由系统进阶(urls.py) 动态路由 urls.py中通过正则表达式的分组匹配,捕获用户访问的url中的值,传递给视图函数1 分组匹配(通过圆括号): 相当于给视图函数传递 位置参数 例子: ...

  4. java-Freemarker-模板引擎学习

    博客:Java模板引擎性能对比  Thymeleaf性能偏低. 博客:Java模板引擎 FreeMarker   综合性的介绍,内容有点粗糙. 博客:JavaEE进阶——FreeMarker模板引擎 ...

  5. Jenkins进阶之自动发送邮件的Default Content设置模板

    分享一个简洁实用的Jenkins项目邮件管理系统的"Default Content"设置模板 配置如下: <h1><center><font colo ...

  6. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  7. webpack4打包nodejs项目进阶版——多页应用模板

    前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...

  8. flask 电子邮件进阶实践-用模板发送163邮件

    电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...

  9. day 48 ORM 进阶 多表连接 创建 以及 html模板继承

    多表的一对多创建 多表的多对多创建 多表的一对多修改 多表的多对多修改 前情提要:   最近认识了不少大佬,大佬开着保时捷. .一顿狂奔..我连车尾灯都看不到.. 本次内容  ORM 的多表链接  查 ...

随机推荐

  1. koa2链接mongodb

    数据库使用的mongodbmongodb下载:https://www.mongodb.com/mongodb GUI:https://robomongo.org/ 使用中间件koa来搭建框架使用中间件 ...

  2. 好的博客参考之Spring

    https://blog.csdn.net/bao19901210/article/details/41724355

  3. java中元注解

    java中元注解有四个: @Retention @Target @Document @Inherited:  @Retention:注解的保留位置 @Retention(RetentionPolicy ...

  4. js中获取时间戳

    function conver(){ var date = new Date(); var year = date.getFullYear() var month=date.getMonth()+1; ...

  5. Spring Boot+BootStrap fileInput 多图片上传

    一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/c ...

  6. C++基础---结构体(struct)

    转自:http://blog.csdn.net/cainv89/article/details/48447225 1. 结构体(struct) 1.1 结构体的概念 结构体(struct):是由一系列 ...

  7. 20135320赵瀚青LINUX第二章读书笔记

    第二章-从内核出发 获取内核代码 使用git 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/tor ...

  8. zabbix_server.log大量提示cannot send list of active checks to "IP": host [HostName] not found

    zabbix server 日志大量提示上图信息 原因是 zabbix_agent.conf配置文件中配置的HostName与zabbix的web界面配置的不同导致的 zabbix_agent.con ...

  9. Idea 切换git账号

    重置一下账号设置,再次执行拉取或推送会提示重新输入账号密码 进入项目根目录执行:git config --system --unset credential.helper

  10. Spring IOC 源码解析(持续)

    如何查看源码 Spring源码下载https://github.com/spring-projects/spring-framework/tags?after=v3.1.0.RC1 eclipse关联 ...