C ++テンプレートクラスのメソッドの戻り値の型がtypedefのうち、または自動で、その後、どのようにクラスのこのメソッドの外側を定義するには?

C ++テンプレートクラスのメソッドの戻り値の型がtypedefのうち、または自動で、その後、どのようにクラスのこのメソッドの外側を定義するには?

  • 例えば、戻り値の方法は、typedefのミントと外MAX1を定義され、その後、どのようにこの外にクラスを定義するには?
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への試みの結果:コンパイルは、しかし、ミントのヒントを認識しません。

2をお試しください:

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

結果は、2を試してください:まだコンパイルできません

3をお試しください:型名キーワードが先行

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

3件の結果をお試しください:によってコンパイル

  • 例えば、方法MAX2の戻り値は、その後どのようにクラスそれこの外側を定義するために、自動車のですか?

    使用decltype(C ++ 11個のプロパティ)。自動車の種類にプッシュするdecltypeをしてみましょう

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の場所は、最も広くトラックへの関数の戻り値の型のため、オートジェネリックプログラミングに関連して使用されます

    このような方法は二つのテンプレートパラメータのTx及びTy、オブジェクトの二種類の添加への戻り値とテンプレートパラメータは低いがあるています。この場合は、この関数の戻り値は、それを送信、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グループ:877 684 253

Iマイクロ手紙:xiaoshitou5854

おすすめ

転載: www.cnblogs.com/xiaoshiwang/p/11845696.html