c++ 模板类,方法返回值类型是typedef出来的

c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义?
  • 比如方法max1的返回值是用typedef定义出来的mint,那么在类外如何定义这个方法呢?

template<typename T>struct aa{  typedef int mint;  mint max1(T a);  auto max2(T a) -> decltype(int(1));  mint data;};

尝试1:

template<typename T>mint aa<T>::max1(T a){}

尝试1的结果:编译不过,提示不能识别mint
尝试2:

template<typename T>aa<T>::mint aa<T>::max1(T a){}

尝试2的结果:依然编译不过
尝试3: 在前面加typename关键字

template<typename T>typename aa<T>::mint aa<T>::max1(T a){}

尝试3的结果:编译通过
  • 比如方法max2的返回值是auto,那么在类外如何定义这个方法呢?
    使用decltype(c++11特性)。让decltype来推到出auto的类型

template<typename T>struct aa{  typedef int mint;  mint max1(T a);  auto max2(T a) -> decltype(int(1));  mint data;};template<typename T>typename aa<T>::mint aa<T>::max1(T a){  }template<typename T>auto aa<T>::max2(T a) -> decltype(int(1)){  return a;}int main(){  aa<int> a;  auto x = a.max2(12);  std::cout << x << std::endl;}

  • decltype用途最广的地方是在泛型编程中结合auto,用于追踪函数的返回值类型
    比如有一下方法,有2个模板参数Tx和Ty,返回值就2个模板参数类型对象的加法的和。这种情况,此函数的返回值是写Tx呢,还是写Ty呢?写哪个都不行,所以必须用decltype(_Tx + Ty)来推到出来。
    template <typename _Tx, typename _Ty>auto add(_Tx x, _Ty y)->decltype(_Tx*_Ty){    return x*y;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值