❥关于C++之泛型
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❥关于C++之泛型相关的知识,希望对你有一定的参考价值。
template <typename AnyType>
void Swap(AnyType &a, AnyType &b)
AnyType temp;
temp = a;
a = b;
b = temp;
在早期没有typename关键字时,用class关键字,它们可互相通用。
template<class T1, class T2>
void ft(T1 x, T2 y)
...
?type? xpy = x + y;
...
xpy的类型是什么?如果是int+double,类型就是double;如果是int+int,类型就是int。
关键字decltype(C++11)
template<class T1, class T2>
void ft(T1 x, T2 y)
...
decltype(x + y) xpy = x + y;
...
如果需要多次声明,可结合使用typedef和decltype:
template<class T1, class T2>
void ft(T1 x, T2 y)
...
typedef decltype(x + y) XyType;
XyType xpy = x + y;
XyType arr[10];
XyType & rxy = arr[2]; // rxy是一个引用
...
后置返回类型(C++11)
有一个相关的问题是decltype本身无法解决的。请看下面这个不完整的模板函数:
template<class T1, class T2>
?type? gt(T1 x, T2 y)
...
return x + y;
好像可以将返回类型设置为decltype ( x + y),但不幸的是,此时还未声明参数x和y,它们不在作用域内,必须在声明参数后才能使用decltype。为此,C++新增了一种声明和定义函数的语法。对于下面的原型:
double h(int x, float y);
新增的语法可编写成这样:
auto h(int x, float y) -> double;
auto h(int x, float y) -> double
/* function body */;
通过结合使用这种语法和decltype,便可给gt()指定返回类型,如下所示:
template<class T1, class T2>
auto gt(T1 x, T2 y) -> decltype(x + y)
...
return x + y;
以上是关于❥关于C++之泛型的主要内容,如果未能解决你的问题,请参考以下文章