函数模板的定义!定义一个函数模板Larger,比较2个数的大小,返回较大的那个.如果想比较一个整型(int)和一个浮点型(double)的变量大小并以大的那个变量的参数类型返回其本身,主要是返回的参数
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 10:32:27
函数模板的定义!定义一个函数模板Larger,比较2个数的大小,返回较大的那个.如果想比较一个整型(int)和一个浮点型(double)的变量大小并以大的那个变量的参数类型返回其本身,主要是返回的参数
函数模板的定义!
定义一个函数模板Larger,比较2个数的大小,返回较大的那个.
如果想比较一个整型(int)和一个浮点型(double)的变量大小并以大的那个变量的参数类型返回其本身,
主要是返回的参数类型不确定.
函数模板的定义!定义一个函数模板Larger,比较2个数的大小,返回较大的那个.如果想比较一个整型(int)和一个浮点型(double)的变量大小并以大的那个变量的参数类型返回其本身,主要是返回的参数
首先问一下为何需要这样的功能呢?即使函数返回值类型不定,最终返回值还是要赋给一个确定类型的变量呀.
要返回不同类型的值有几种方法.其一是返回一个union.比如
template
union U {T0 _0; T1 _1;};
template
U larger(T0 v0,T1 v1)
{
U u;
if (v0 >= v1) u._0 = v0;
else u._1 = v1;
return u;
}
不过这样做有个缺点就是该函数的调用方无法知道到底返回的是个什么类型.要想知道返回类型,可以使用boost库中的variant.下面的代码演示如何利用boost::variant来返回多种类型以及判断所返回的类型.注意,要编译这段代码需要先下载boost库并将其放在编译器的include目录下.
#include
#include
template
boost::variant larger(T0 v0,T1 v1)
{
boost::variant r;
if (v0 >= v1) r = v0;
else r = v1;
return r;
}
int main()
{
boost::variant r;
r = larger(1,2.0);
if (boost::get(&r)) std::cout