模板参数默认值
2014-07-12 10:09
204 查看
上次我们讲了模板参数自动推导,模板参数自动推导可以让我们调用模板函数和调用普通函数一样方便,但是,如果模板参数列表中存在不能进行自动推导的参数,那么,当我们调用这个模板函数的时候,还需要为它们指定实际的模板参数;那么是否有一种方法,可以帮助我们彻底实现调用模板函数和调用普通函数一样简单呢?答案是有的,那就是:模板参数自动推导+模板参数默认值。今天我们就来看一下什么是模板参数默认值。
模板参数默认值的主要目的就是为那些不能进行自动推导的模板参数赋予一个默认值,使用方法就是直接在模板参数后边通过等号为其赋值;这样,我们调用这个模板函数就可以不用再为任何模板参数赋值。下面,我们看一个例子,这个例子演示了使用模板默认值的好处。需要注意的是,模板参数默认值需要C++11的支持,我的机器使用的是vc2013和gcc 4.81,这两个版本的编译器都支持C++11的特性。在gcc 4.81的编译器中,编译命令如下:
g++ -o 文件名 源文件名列表 -std=c++11
例1 使用模板参数默认值的好处
图1 使用模板参数默认值的好处
在例1中,由于模板参数T0和T2不能自动推导,所以,在调用这个模板函数的时候,一定要指定,又因为T1和T3被T2分隔,所以导致T1也要被指定实际的模板参数,因此如果不使用模板参数默认值的机制,调用这个模板函数的方法如下:
今天,我们主要讲了什么是模板参数默认值以及它的好处。希望大家多多练习,在实践中体悟它的用法和方便。
模板参数默认值的主要目的就是为那些不能进行自动推导的模板参数赋予一个默认值,使用方法就是直接在模板参数后边通过等号为其赋值;这样,我们调用这个模板函数就可以不用再为任何模板参数赋值。下面,我们看一个例子,这个例子演示了使用模板默认值的好处。需要注意的是,模板参数默认值需要C++11的支持,我的机器使用的是vc2013和gcc 4.81,这两个版本的编译器都支持C++11的特性。在gcc 4.81的编译器中,编译命令如下:
g++ -o 文件名 源文件名列表 -std=c++11
例1 使用模板参数默认值的好处
#include<iostream> using namespace std; template<typename T0=float, typename T1,typename T2=int, typename T3, typename T4> T2 func(T1 v1, T3 v3, T4 v4) { return (T2)0; } int main() { int n = func(1, 2, 3); cout<<n<<endl; return 0; }运行效果如图1:
图1 使用模板参数默认值的好处
在例1中,由于模板参数T0和T2不能自动推导,所以,在调用这个模板函数的时候,一定要指定,又因为T1和T3被T2分隔,所以导致T1也要被指定实际的模板参数,因此如果不使用模板参数默认值的机制,调用这个模板函数的方法如下:
int n = func<float,int,int>(1, 2, 3);因此,通过对比两种模板函数的调用方式,我们会发现使用模板参数默认值的方便。
今天,我们主要讲了什么是模板参数默认值以及它的好处。希望大家多多练习,在实践中体悟它的用法和方便。
相关文章推荐
- 第二十三模板 11模板参数提供默认值
- 模板参数默认值
- C++ Templates (给模板参数命名2)
- php指定函数参数默认值示例代码
- DELL 服务器使用zabbix监控的参数及模板
- 函数的参数的默认值
- 模板参数为数组
- 带有模板参数的函数指针
- C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值
- C++ 模板类型参数
- 对于qt5的信号机制的一点参考,然后利用模板实现:在新线程执行可变函数参数的调用
- python函数之_默认值参数总结
- C++参数默认值和函数重载的作用
- AX 2012 安装EP时提示网站模板“AXSITEDEF#0”的文件或参数无效
- template关键字typename和class的区别,以及模板默认参数
- 用模板作为模板参数
- C++:为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是?
- 非类型模板参数示例
- c++模板实现多参数任意传 - 类实现
- 扩展方法和设置参数默认值