Всем привет.
Помогите пожалуйста разобраться с шаблонами, т.е. как правильно инстанцировать.
Вот простой код:
template <typename T>
T tmin(T a, T b) {
std::cout << "template T" << std::endl;
return a < b ? a: b;
}
template<> double tmin<double>(double a, double b);// {
//std::cout << "template double" << std::endl;
//return a < b ? a: b;
//}
int main(int argc, char** argv) {
std::cout<< "double: " << tmin<>(5.0, 6.5)<<std::endl;
std::cout<< "int: " << tmin<>(5, 6)<<std::endl;
return ( 0 );
}
double: 5
template T
int: 5
Если шаблон инстанцирую без <> после template, то вывод такой:
template T
double: 5
template T
int: 5
В чем разница, объясните пожалуйста?!
И еще, вот тут http://www.linuxtopia.org/online_books/programming_books/c _practical_progra... описывается явная специализация, но специализация со своим телом функции. В примере выше так не получается сделать(закомментил тело в специализации).
Не подскажите почему?
Заранее благодарю за пояснения!