C++: какой смысл объявлять функцию внутри другой функции?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 C++: какой смысл объявлять функцию внутри другой функции?

Сообщение Гость »


В «Букваре C++» Стэнли Липпмана на странице 234 упоминается, что


Обычно объявлять функцию локально — плохая идея. Однако
чтобы объяснить, как область видимости взаимодействует с перегрузкой, мы нарушим эту
практику и будем использовать объявления локальных функций.


< предварительно>

Код: Выделить всё

...
void print(const string &);
void print(double); // overloads the print function
void fooBar(int ival)
{ ...
// bad practice: usually it's a bad idea to declare functions at local scope
void print(int); // new scope: hides previous instances of print
print(ival); // ok: print(int) is visible
print(3.14); // ok: calls print(int); print(double) is hidden
}
Nevertheless, which situation it might make sense to do so, declaring a function inside the body of a function?

I recall similar code in Scheme:

Код: Выделить всё

(define (PowerSet set)
(if (null? set) '(())
(let ((PowerSetAfterHead (PowerSet (cdr set) ) ))
(append PowerSetAfterHead
(PowerSet (cdr set) )
(map
(lambda (subset)
(cons (car set) subset
)
)
(PowerSet (cdr set) )
)
)
)
)
)
Is it normally used to hide from misuse of a "local function" that intends for the outer function's usage only? something like internal class? Or is it useful in some design patterns?


Источник: https://stackoverflow.com/questions/278 ... r-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»