再帰的なランタイム計算が不要になるように、テンプレートを使用してコンパイル時の階乗計算を作成するよく知られた例を理解しています。このような例では、計算に必要なすべての値がコンパイル時にわかっています。
しかし、テンプレートを使用して数値の累乗を計算するこの別の例に出くわしましたが、これが同様のランタイム再帰関数に対する最適化であることがわかりません。
template<int n>
inline int power(const int& m) { return power<n-1>(m)*m;}
template<>
inline int power<1>(const int& m) { return m;}
template<>
inline int power<0>(const int& m) { return 1;}
cout << power<3>(m)<<endl;
明らかに、m
この例ではコンパイル時に知ることはできません。したがって、実行時に一連の計算が引き続き実行され、基本的に と同じ結果が得られm*m*m
ますよね?
このようなテンプレートに対する明確な利点はありますか? 多分私はそれを見ていないだけです。