LINUX.ORG.RU

Eiffel на C++


0

0

Хочу такую фигню на C++ сделать. Что-то типа
void f (.....)
{
some->open();
other->create();
POSTCONDITION
some->close ();
other->free ();
END_OF_POSTCONDITION
основное тело функции.
}
То, что между POSTCONDITION ... END_OF_... должно всегда вызываться, вне зависимости от завершения функции. Как сделать такое с try { } catch в принципе понятно. Но может кто более интересное решение, чтобы можно было постусловия ИМЕННО в начале функции писать, а не в конце.

ЗЫ это все auto_ptr виноват. Так к нему привык, что очень хочется что-то похожее и дальше использовать.
ЗЗЫ а эйфель тут таким боком, что там такая фигня вроде есть

anonymous

В Eiffel постусловия (и предусловия) используются для проверки правильности программы а не для освобождения ресурсов.

anonymous
()
Ответ на: комментарий от anonymous

>В Eiffel постусловия (и предусловия) используются для проверки >правильности программы а не для освобождения ресурсов.
Насколько я понимаю, постусловие вызывается (проверяется) после того, как функций отработала. Соответственно подумалось, почему бы и нет.

anonymous
()
Ответ на: комментарий от anonymous

В Eiffel постусловие не должно изменять состояние, 
так как если оно будет его изменять, то пришлось 
бы ставить постусловие на постусловие чтобы 
проверить корректность работы постусловия :)

Твоя задача появилась от того что нет в c++ блока 
try { ... } finally { ... }

Горю можно помочь.  Сделай примерно такой макрос:

#define POSTCONDITION class PostconditionClass { \
      ~PostconditionClass() {

#define END_OF_POSTCONDITION } postcondition;

Пишу естественно на глазок, могу ошибаться в деталях,
но в целом должно работать.  Хотя лучше не использовать
язык в котором перестало хватать выразительности ;)

anonymous
()
Ответ на: комментарий от anonymous

Забыл как минимум закрыть фигурную скобку у деструктора, но надеюсь идея понятна.

anonymous
()
Ответ на: комментарий от anonymous

Задача появилась примерно по этой причине (try finally)
Да вот только решение с макросом меня не устраивает (вызов деструктора как метод "самоуничтожения" я давно использую).
Вообще ладно. Так как других решений нет - придется слегка извратиться

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.