次のコードの関数テンプレートはクラス テンプレートのメンバーであるため、外側のクラスを特殊化せずに特殊化することはできません。
しかし、コンパイラの完全な最適化がオンになっている場合 (Visual Studio 2010 を想定)、次のコードの if-else ステートメントは最適化されますか? もしそうなら、それはすべての実用的な目的のために、これはパフォーマンスコストのない関数テンプレートの特殊化であることを意味しませんか?
template<typename T>
struct Holder
{
T data;
template<int Number>
void saveReciprocalOf();
};
template<typename T>
template<int Number>
void Holder<T>::saveReciprocalOf()
{
//Will this if-else-statement get completely optimized out
if(Number == 0) data = (T)0;
else data = (T)1 / Number;
}
//-----------------------------------
void main()
{
Holder<float> holder;
holder.saveReciprocalOf<2>();
cout << holder.data << endl;
}