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

2019-11-12 16:00:53来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义?

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;
    }

decltype使用参考:https://www.cnblogs.com/QG-whz/p/4952980.html

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854


原文链接:https://www.cnblogs.com/xiaoshiwang/p/11845696.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:赋值和初始化

下一篇:Codeforces 939A题水题