С одной стороны, вы, кажется, говорите о типах функций в целом. С другой стороны, похоже, что ваш вопрос действительно о пригодности имен typedef для типов функций.
Типы функций сами по себе являются фундаментальной концепцией, встроенной в языки C и C ++. Они используются все время. Вы просто не можете жить без них. Каждый раз, когда вы объявляете функцию, вы объявляете сущность типа функции. Каждый раз, когда вы используете указатель на функцию, вы используете указатель на тип функции. И т.д.
Что касается возможности создания имен typedef для типов функций ... Я не вижу особого смысла в этом. Я думаю, что это часть багажа C, которая была немного расширена для C ++ только потому, что это было легко сделать.
Как вы правильно заметили, для определения функций-членов можно использовать имена typedef для типов функций (а в C ++ вы также можете включить спецификатор const
в typedef, как в typedef int MemberType() const;
), но, например, вы не можете используйте эту функцию с типами функций, передаваемыми в качестве параметров шаблона.