Параметры шаблона функции без типов

Я читал полное руководство по шаблонам C ++ и наткнулся на этот код параметров шаблона функции, не относящийся к типу (я добавил main () и другие части, кроме определения и вызова функции ):

#include <vector>
#include <algorithm>
#include <iostream>

template <typename T, int value>
T add (T const & element){
  return element + value;
}

int main() {
  int a[] = {1,2,3,4};
  int length = sizeof (a) / sizeof (*a);
  int b[length];
  std::transform (a, a + length, b, (int(*)(int const &))add <int, 5>); //why?
  std::for_each (b, b + length, [](int const & value){ std::cout << value << '\n'; });
  return 0; 
}

Прочитав книгу, я не понял, зачем нам нужно приведение типа вызова функции?

РЕДАКТИРОВАТЬ: Объяснение из книги:

add - это шаблон функции, а шаблоны функций считаются именами набора перегруженных функций (даже если набор имеет только один член). Однако в соответствии с действующим стандартом, наборы перегруженных функций не могут использоваться для вывода параметров шаблона. Таким образом, вы должны привести к точному типу аргумента шаблона функции: ...

Компилятор: g ++ 4.5.1 в Ubuntu 10.10

6
задан badmaash 24 July 2011 в 17:27
поделиться