|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Serge A. Suchkov 2:5020/400 09 Jul 2001 14:30:14 To : All Subject : Re: __finally; HOW? -------------------------------------------------------------------------------- Valentin Nechayev wrote: > >>> Ender wrote: > > Hу при некоторой доле фантазии... > E> Кто-нибудь может сказать как организовать в программе на C/C++ блоки и используя ++ > > E> защищенного кода. Т.е. написать нечто вроде стандартного MSVC'шного или > E> Delphi'йского: > E> __try > можно написать нечто типа ---- finally.h --- #ifndef _finally_h_ #define _finally_h_ #define __try(A){ class finally { \ public:\ A ret_val;\ finally(){ret_val=do_constr();}\ A do_constr(){ #define __finally(A) return ret_val;}\ ~finally() { ret_val=do_destr(); }\ A do_destr(){ #define __end_finally return ret_val;}\ }; finally f; return f.ret_val;} #endif // _finally_h_ ----end finally.h-- Примерчик использования ... - --- test.cxx--- #include <stdio.h> #include "finally.h" int main( int argc, char *argv[]) { __try(int) { printf("Section 1\n"); __try(int) { printf("Section 2\n"); return 0; } __finally(int) { printf("Finalization section 2\n"); } __end_finally; } __finally(int) { printf("Finalization section 1\n"); __try(int) { printf("Section 3\n"); } __finally(int) { printf("Finalization section 3\n"); } __end_finally; } __end_finally; } - ---end test.cxx-- немножко громоздко конечно но вполне себе __finally() ;) > > Это тебе setjmp/longjmp нужен, скорее всего... > Если использовать это - то может получится и более красиво но сходу в голову не приходит как это сделать... > > /netch -- Serge. --- ifmail v.2.15dev5 * Origin: BMSTU (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/5525ee649075.html, оценка из 5, голосов 10
|