Как указывали другие ответы, поскольку в наши дни вы можете создавать анонимные функции на большинстве языков, вы можете назначить такой объект-функцию переменной, что фактически приводит к локальной функции (хотя рекурсия может быть сложной).
В C ++ до C ++ 1x анонимные функции (известные как лямбды) пока недоступны. Однако вы все равно можете объявить функцию внутри функции, потому что вы можете объявить класс или структуру внутри функции. Если вы сделаете этот класс реализующим operator()
, затем создадите экземпляр класса и сохраните его в именованной переменной, вы получите то же самое, что и лямда в C ++ 1x.
Проблема в том, что он (а) будет гораздо более многословным и (б) не будет допустимым в качестве аргумента шаблона.