_>Нет проблем. Только кому это надо?
...проще надо быть
#define RETRY(ATTEMPTS) for(int try_attempt = 0; try_attempt <= ATTEMPTS; ++try_attempt) try {
#define CATCH(E) break; } catch(E) {
#define DONE }
int _tmain(int argc, _TCHAR* argv[])
{
RETRY(3)
{
if (--argc) throw std::exception("world");
printf("done\n");
}
CATCH(std::exception &e)
{
printf("hello %s\n", e.what());
}
DONE
return 0;
}
или со строгим киданием исключения выше:
#define RETRY(ATTEMPTS) for(int try_attempt = 0, max_attempt = ATTEMPTS; ; ++try_attempt) try {
#define REPAIR(E); break; } catch(E) { if (try_attempt == max_attempt) throw;
#define DONE }
int _tmain(int argc, _TCHAR* argv[])
{
RETRY(3)
{
if (--argc) throw std::exception("world");
printf("done\n");
}
REPAIR(std::exception &e)
{
printf("hello %s\n", e.what());
}
DONE
return 0;
}
но все равно это костыль имхо
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, ononim, Вы писали:
O>или как вариант параметризовать try количеством пере-попыток (по дефолту значицца оно равно нулю):
O>O>void outer()
O>{
O> try(1)
O> {
O> some_vector.resize(some_value);
O> }catch (bad_alloc &a)
O> {
O> free_some_memory();
O> }
O>}
O>
Дык, прямо ща можно же
void outer()
{
re:try {
some_vector.resize(some_value);
}catch (bad_alloc &a) {
if( try_free_some_memory() )
goto re;
}
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском