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