Re[7]: Исключения в C++
От: ononim  
Дата: 26.03.16 22:08
Оценка:
_>Нет проблем. Только кому это надо?

...проще надо быть
#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;
}

но все равно это костыль имхо
Как много веселых ребят, и все делают велосипед...
Отредактировано 26.03.2016 22:47 ononim . Предыдущая версия .
Re[3]: Исключения в C++
От: Erop Россия  
Дата: 27.03.16 18:59
Оценка:
Здравствуйте, _hum_, Вы писали:

__>полагаете, что все-таки рост объема обрабатываемых данных опередит рост производительности и емкости устройств?


От области зависит...
Я вот в области AI работаю, например, таки у нас часто можно разменять время, память и прочую производительность на качество результата. Так что постановка задачи "думаем скока можем себе позволить" вполне жизненная.

Например, если т игрока в шахматы с контролем времени пишешь, то тебе полезно знать скока у тебя осталось времени, а если какой-то рекурсивный переборщик, да ещё и в многопоточном окружении работающий, то часто хочется узнать что-то вроде ответа на вопрос "а сколько её стека есть?"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Исключения в C++
От: Erop Россия  
Дата: 27.03.16 19:02
Оценка:
Здравствуйте, 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;
    }
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.