Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вложенные функции


Автор: v 19.7.2002, 12:06
Привет всем. Я пересел на C++ недавно (раньше работал на паскале) и столкнулся с такой штукой - в паскале я могу описать функцию внутри другой функции (imho очень полезная фишка), но "С" этого не допускает... Вопрос - кто как из этого выпутывается?

Автор: Люда 19.7.2002, 12:12
А зачем тебе это, может можно по другому обойтись?  :notify

Автор: podval 19.7.2002, 12:31
описывай не внутри  :)

Автор: NetBird 19.7.2002, 12:57
Действительно, иногда ну очень нужно, чтобы функция была видна только в одной или нескольких других функциях. Тут три выхода:
Первый: объявляй в каждой функции свою скрытую функцию, а её текст вставь в самый конец(исходника конечно).
Второй: Пишешь саму эту функцию, а за ней только те которые её используют.
Третий(самый естесттвенный): используй перегрузку функции и ни каких проблем.
Хотя всё зависит от поставленной задачи !

Автор: Fantasist 19.7.2002, 15:08
Есть еще один путь: создание класса и перегрузки у него оператора operator(), если это, конечно, все-таки С++ а не С.

Автор: umator 21.7.2002, 21:43
Можно пользоваться пространствами имён namespace.

Автор: guest 29.7.2002, 10:33
Цитата(Fantasist @ 19.7.2002, 16:08)
Есть еще один путь: создание класса и перегрузки у него оператора operator(), если это, конечно, все-таки С++ а не С.

Идея эта не нова.  Называется она Functor.

Я нашел на google ответ обсуждающий этот вопрос:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=L4MD8.1582%24wY5.1200%40nwrddc03.gnilink.net

Автор: Fantasist 29.7.2002, 12:41
Цитата
Идея эта не нова.  Называется она Functor.


Конечно не нова. Имено поэтому ее стоит упомянуть в первую очередь. Хотя опять же, все зависит от того, что хочешь добиться.

P.S. Посмотрел ссылку, по моему пример выдран целиком из книги Элджера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)