Тип является типом функции.Возможно, вы не очень знакомы с ним, потому что до сих пор он использовался только в типах указателей:
typedef int (ft)(void); // Huh? (raw function type)
typedef ft *fp; // ??? (pointer to function)
typedef int (*fp_oldstyle)(void); // Ahh... (same as fp)
Сами функции имеют типы, но поскольку вы не можете объявлять переменные этого типа или ссылки на нихединственное, что вы обычно используете, это указатели, которые объявлены в привычном синтаксисе в последней строке.Для любой функции int foo(void);
и foo
, и &foo
интерпретируются как указатель, поэтому «необработанный» тип функции ft
не требуется.
Однако с новым магическим окружением шаблонаstd::function
, std::bind
и лямбда-выражения, теперь гораздо более распространенная вещь - видеть голые типы функций в параметрах шаблона.