Сообщение Re[6]: RAII && try/finalize от 14.02.2016 11:51
Изменено 14.02.2016 11:56 rg45
Здравствуйте, kr510, Вы писали:
R>>Внутири cleanup нет никакой связи с локальными объектами вызывающей фунции.
K>cleanup может быть либо лямдой, если "void play()" только один, либо методом TSomeObject.
Ну то есть, это уже не только catch, а catch плюс лямбды. Еще один шажок и приходим к тому, что лямбду можно поместить в деструктор какого-нибудь объекта, как предлагали здесь
K>Точек куда надо вставить только 2: выход по exception и выход по успеху. Это предельно простой и надежный код.
Ну во-первых две это уже хуже, чем одна. А во-вторых, остается таки открытым вопрос, что делать в случаях, когда точек возврата больше, чем две. Например, захотели мы добавить еще один блок catch для std::exception, как быть? Нормальное же желание, нет ничего предосудительного?
R>>Внутири cleanup нет никакой связи с локальными объектами вызывающей фунции.
K>cleanup может быть либо лямдой, если "void play()" только один, либо методом TSomeObject.
Ну то есть, это уже не только catch, а catch плюс лямбды. Еще один шажок и приходим к тому, что лямбду можно поместить в деструктор какого-нибудь объекта, как предлагали здесь
Автор: uncommon
Дата: 14.02.16
. А там, глядишь, и придем к выводу, что решение с catch не единственное, а, возможно даже, не самое лучшее.Дата: 14.02.16
K>Точек куда надо вставить только 2: выход по exception и выход по успеху. Это предельно простой и надежный код.
Ну во-первых две это уже хуже, чем одна. А во-вторых, остается таки открытым вопрос, что делать в случаях, когда точек возврата больше, чем две. Например, захотели мы добавить еще один блок catch для std::exception, как быть? Нормальное же желание, нет ничего предосудительного?
Re[6]: RAII && try/finalize
Здравствуйте, kr510, Вы писали:
R>>Внутири cleanup нет никакой связи с локальными объектами вызывающей фунции.
K>cleanup может быть либо лямдой, если "void play()" только один, либо методом TSomeObject.
А можешь привести пример, как ты собираешься вызвать в блоке catch лямбду, определенную в блоке try?
И потом, это уже не просто catch, как ты предлагал изначально, а catch плюс лямбды. Еще один шажок и приходим к тому, что лямбду можно поместить в деструктор какого-нибудь объекта, как предлагали здесь
K>Точек куда надо вставить только 2: выход по exception и выход по успеху. Это предельно простой и надежный код.
Ну во-первых две это уже хуже, чем одна. А во-вторых, остается таки открытым вопрос, что делать в случаях, когда точек возврата больше, чем две. Например, захотели мы добавить еще один блок catch для std::exception, как быть? Нормальное же желание, нет ничего предосудительного?
R>>Внутири cleanup нет никакой связи с локальными объектами вызывающей фунции.
K>cleanup может быть либо лямдой, если "void play()" только один, либо методом TSomeObject.
А можешь привести пример, как ты собираешься вызвать в блоке catch лямбду, определенную в блоке try?
И потом, это уже не просто catch, как ты предлагал изначально, а catch плюс лямбды. Еще один шажок и приходим к тому, что лямбду можно поместить в деструктор какого-нибудь объекта, как предлагали здесь
Автор: uncommon
Дата: 14.02.16
. А там, глядишь, и придем к выводу, что решение с catch не единственное, а, возможно даже, не самое лучшее.Дата: 14.02.16
K>Точек куда надо вставить только 2: выход по exception и выход по успеху. Это предельно простой и надежный код.
Ну во-первых две это уже хуже, чем одна. А во-вторых, остается таки открытым вопрос, что делать в случаях, когда точек возврата больше, чем две. Например, захотели мы добавить еще один блок catch для std::exception, как быть? Нормальное же желание, нет ничего предосудительного?