0
点赞
收藏
分享

微信扫一扫

c++decltype解决模板类型

1、在模板函数中,通过对模板类型的运算后,并不能确定返回的类型。

template<class T1,class T2>

void ft(T1 x,T2 y){
? xpy = x+y;
}

x+y的返回值是无法确定的,可以使用decltype来实现。

decltype(x+y) xpy = x+y;

decltype(x+y)的意思就是返回类型就是x+y的结果类型。

double xx = 4.4;
decltype(xx) w = xx; //w是double类型

如果想把另一个变量指定为xx类型的引用,就需要再加个括号。

decltype((xx)) r = xx; //r就是double &类型

如果需要多次声明,可以结合typedef。

{

typedef decltype(x+y) xytype;
xytype xpy = x+y;
xytype arr[10];
...

}

2、如果是函数返回类型不确定,是没办法使用decltype。

decltype(x+y) ft(T1 x,T2 y)

这样是不行的,此时还未声明参数x和y,它们不在作用域内。必须在声明参数后使用decltype。

有一种语法可以把返回类型放入到参数定义的后面。

auto ft(T1 x,T2 y) -> decltype(x+y)

auto是一个占位符,表示后置返回类型提供的类型,-> 后面跟着decltype(x+y)就是需要返回的类型。

举报

相关推荐

0 条评论