C++模板

标签: C++ 模板
632人阅读 评论(0) 收藏 举报
分类:

C++模板主要解决类型多态,对于定义和使用的话,其实也是很简单的理解

简单写了两个示例


一、函数模板

假如我需要计算两个值相加,但可能会传入float或者int等不同类型的值,

以往我们回考虑到各种情况,可能会写几个重载函数来解决这个问题,

现在可以使用模板函数,正好也解决写一些多余的代码啊,具体如下

#include "stdafx.h"
#include <iostream>

/*
template为模板声明,
<>里为模板参数列表,不能为空,可以多个
如果需要在其他地方定义或者需要再函数类再定义一个类型,编译器不是能识别的,是需要用typename再次声明
*/
template<typename T> //这里的typename也可以用class代替,为了与类模板混淆,才有了typename,其实都一样
T AddNum(T Num01, T Num02)
{
	return Num01 + Num02;
}

int main()
{
	std::cout << "int add:@@ " << AddNum(10, 23) << std::endl;
	std::cout << "float add:@@ " << AddNum(16.0f, 3.0f) << std::endl;
	while (true)
	{}
    return 0;
}

二、类模板

类模板如果说到vector或者list,其实就更好理解了,基本上都属于常用的东西

我这里就简单输出了一串字符

#include "stdafx.h"
#include <iostream>

/*
template为模板声明
class与typename一样,
其他都一样,需要定义为不确定类型,用typename/class声明一下
在类体外实现函数或初始化变量,且他们都带模板变量的话,需要在使用的地方再次声明一遍
*/
template <class T>
class PrintT
{
public:
	T Value;
};

int main()
{
	PrintT<char*>* pt = new PrintT<char*>();
	pt->Value = "test print";

	std::cout << "char print:@@ "<<(pt->Value)<<std::endl;
	while (true)
	{}
    return 0;
}


查看评论

C++模板进阶

模版元编程(template metaprogram)是C++中最复杂也是威力最强大的编程范式,它是一种可以创建和操纵程序的程序。模版元编程完全不同于普通的运行期程序,它很独特,因为模版元程序的执行完全是在编译期,并且模版元程序操纵的数据不能是运行时变量,只能是编译期常量,不可修改,另外它用到的语法元素也是相当有限,不能使用运行期的一些语法,比如if-else,for等语句都不能用。
  • 2017年09月06日 19:28

C++ 编译器处理模板的原理

编译器遇到模板方法定义时,会进行语法检查,但是并不编译模板。编译器无法编译模板定义,因为它不知道使用什么类型。不知道x和y的类型,编译器就无法为x=y这样的语句生成代码。 编译器遇到一个实例化的模板时...
  • u011206291
  • u011206291
  • 2016-10-26 10:19:43
  • 1708

C++模板深入理解

如何组织编写模板程序 前言 常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Bo...
  • fenxinzi557
  • fenxinzi557
  • 2016-08-12 12:01:32
  • 799

C++ 高级篇(一)—— 模板(Templates)

模板(Templates)是ANSI-C++ 标准中新引入的概念。如果你使用的 C++ 编译器不符合这个标准,则你很可能不能使用模板。     函数模板( Function templates) ...
  • zqixiao_09
  • zqixiao_09
  • 2016-05-22 12:44:23
  • 26143

c++ 模板

c++    模板 在编程中  ,我们经常会遇到一些通用函数 。。。。 要通过这个函数来实现不同的参数的函数的调用 。。。 之前在C++中我们学习了 函数的重载 来解决这个问题 。。。 但是函数重...
  • WX_East
  • WX_East
  • 2016-11-04 23:07:10
  • 1269

c++的模板继承

       原创文章,转载请注明出处,谢谢!               作者:清林,博客名:飞空静渡 我们有这么一组这样的类,其类继承关系如下图:我们先把base, man, 和woman...
  • fjb2080
  • fjb2080
  • 2010-11-09 10:32:00
  • 4965

C++模板的理解与使用

最近发现原来学的东西根本都不理解,所以本人正在恶补C++,把自己对C++中概念的最简单粗暴的理解写下来。 有问题的地方还请指出~随时更正 模板:顾名思义,就是为了方便以后使用而出现的东西,生活中的...
  • u012999985
  • u012999985
  • 2015-08-22 11:01:21
  • 799

使用VS2010自定义C++模板

使用VS2010自定义C++模板最近需要自定义生成C++模板,网上查阅不少资料,最终成功完成。归纳一下具体的流程,以供以后直接使用,免去重复搜索。1.生成模板工程打开VS2010,新建项目,在Visu...
  • jsairre
  • jsairre
  • 2016-05-13 22:28:33
  • 2141

C++14学习笔记(5)——变量模板

模板是C++实现元编程的重要手段,C++的模板有类模板、函数模板,在C++11中引入了类型别名模板。而在C++14中,引入了一种称为变量模板的新的模板类型。...
  • MgcosA
  • MgcosA
  • 2016-12-05 11:21:39
  • 768

C++双重模板

Template Template Paraments(双重模板参数)模板参数本身也可以是一个类模板,例如实现一个Stack class。为了使用其他类型的元素容器,使用者必须两次指定元素类型:一次是...
  • GuFanYuan
  • GuFanYuan
  • 2016-01-16 16:12:33
  • 366
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 54万+
    积分: 6371
    排名: 4796
    关于
    博客专栏
    最新评论