Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: __finally; HOW?   Valentin Nechayev   09 Jul 2001 08:55:33 
 Re: __finally; HOW?   Serge A. Suchkov   09 Jul 2001 14:30:14 
 Re: __finally; HOW?   Serge A. Suchkov   10 Jul 2001 13:45:24 
Архивное /ru.linux/5525da895904.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional