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


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)
 
 

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

 Тема:    Автор:    Дата:  
 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/5525ee649075.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional