由于以下代码中的函数模板是类模板的成员,因此如果不专门化封闭类就无法专门化它。
但是,如果编译器的全部优化已启用(假设 Visual Studio 2010),以下代码中的 if-else-statement 会得到优化吗?如果确实如此,这是否意味着出于所有实际目的,这是一个没有任何性能成本的函数模板专业化?
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;
}