距离上一篇已经过去1个多月了,感觉断更太久不是好事,所以我在百忙之中抽时间更一下
(小若:说得好像我们在等着你写教程似的~!)因为最近事多,还没脱离繁忙时期,所以就.. 内容少一些好了~
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址: http://www.benmutou.com/archives/1938
文章来源:笨木头与游戏开发
1.函数重载
什么是函数模板呢?一听就是我们开发者偷懒用的东西了。
假设,我们要写一个函数,它有一个参数,传入参数,然后输出这个参数的两倍值,如下代码:
[cce_cpp]
void getDouble(int num)
{
std::cout << (num * 2);
}
[/cce_cpp]
比如调用getDouble(10); 就会输出20。
这很简单,但,如果我要输入float类型呢?很简单,再写一个函数就可以了:
[cce_cpp]
void getDouble(int num)
{
std::cout << (num * 2);
}
void getDouble(float num)
{
std::cout << (num * 2);
}
[/cce_cpp]
这就是函数重载,大部分编程语言都有这概念,这里就不啰嗦了。
但是,如果我们要给很多类型的参数做重载,就要写很多个这样的函数,如果函数的内容稍微复杂一些,以后改起来也很麻烦(要一个个函数去修改)。
于是,函数模板可以解救我们。
2.函数模板
模板的意思就是,我们可以写一次函数,就可以适应不同的参数,相当于编译器帮我们进行了函数重载。
如下代码:
[cce_cpp]
template <typename T>
void getDouble(T num)
{
std::cout << (num * 2);
}
[/cce_cpp]
template关键字用于定义模板,typename定义类型,T是类型名称,可以随意命名。
接下来实现函数内容就可以了~
当我们调用getDouble(10)的时候,编译器将创建参数为int num的getDouble函数。
当我们调用getDouble(10.25f)时,编译器将创建参数为float num的getDouble函数。
函数模板本身并不会创建这些函数,模板只是为了告诉编译器,当我们调用getDouble函数时,将自动为我们创建对应的getDouble函数。
最终效果和我们手动编写多个重载函数是一样的,唯一的不同就是——我们可以偷懒了。
3.结束
好了,关于模板函数的初步认识就介绍到这里,后面还有更多的内容,下次继续~