Re[4]: Исключения в C++
От: kov_serg Россия  
Дата: 26.03.16 18:42
Оценка:
Здравствуйте, ononim, Вы писали:

O>моя задумка чтоб код получился попроще для написания и чтения, причем для разных вариантов кода в catch и разных исключений. Вариант с памятью — просто вариант. Могут быть куча других ситуаций типа:


И что мешает. Это тоже прото эскиз:
struct Policy {
    static Policy* getContextPolicy();
    virtual void handle(int limit) {
        try {
            throw;
        } catch(EMemory *) {
            //...
        } catch(...) {
            //...
        }
    }
};

struct Try { 
    int limit;
    Policy *policy;
    Try(int count,Policy *policy) { limit=count; }
    operator int() { return limit>0; }
    void handle() { 
        if (limit-->0) policy->handle(limit);
        else throw;
    }    
    void gc() { /*...*/ }
};

#define TRY_LIMIT(n) for(Try t(n,Policy::getContextPolicy());t;) { try {
#define END } catch(...) { t.handle(); } }

...
TRY_LIMIT(3) some_work(); END


O>И для каждого случая рисовать свою структуру? Тогда уж проще по старинке...

Зачем. Как обрабатывать отказы должен задавать вызывающий. И вообще включи воображение. Вариантов тьма.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.