Здравствуйте, 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>И для каждого случая рисовать свою структуру? Тогда уж проще по старинке...
Зачем. Как обрабатывать отказы должен задавать вызывающий. И вообще включи воображение. Вариантов тьма.