|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Serge A. Suchkov 2:5020/400 10 Jul 2001 13:45:24 To : All Subject : Re: __finally; HOW? -------------------------------------------------------------------------------- "Serge A. Suchkov" wrote: > 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-- > Во загнул с перепою то 8) можно на ту же тему но чуть проще ... - --- *.h ---- class finally { public: finally(){;} ~finally(){throw(finally*)}; }; #define __try try { { finally f; #define __finally } } catch(finally* pf) - --- конец *.h ------- > > Примерчик использования ... > уже без (int) и end_finnaly ... > > --- test.cxx--- > > #include <stdio.h> > #include "finally.h" > int main( int argc, char *argv[]) > { > __try { > printf("Section 1\n"); > __try { > printf("Section 2\n"); > return 0; > } __finally { > printf("Finalization section 2\n"); > } ; > } __finally { > printf("Finalization section 1\n"); > __try { > printf("Section 3\n"); > } __finally { > printf("Finalization section 3\n"); > } ; > } ; > } > > ---end test.cxx-- > -- Serge again :) --- ifmail v.2.15dev5 * Origin: BMSTU (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/5525da895904.html, оценка из 5, голосов 10
|