Информация об изменениях

Сообщение Re[3]: Покритикуйте код от 05.02.2015 18:15

Изменено 05.02.2015 18:18 Evgeny.Panasyuk

Здравствуйте, andyp, Вы писали:

EP>>[/ccode]init возвращает ScopeGuard, который при отсутствии commit'а сделает uninit в деструкторе. А с использованием stack_unwinding commit можно вообще убрать.

A>Евгений, можешь рассказать, чего я глобально лишаюсь, используя только standalone версию библиотеки + лямбды в качестве action? Тяжеловато продраться через бустовский чудеса с препроцессором.

Boost.ScopeExit писался в первую очередь для pre-C++11 кода. Например там эмулируются локальный функции, в то время как в C++11 уже есть готовые лямбды. Ничем не уступающая реализация ScopeExit, и даже превосходящая, в C++11 займёт всего два десятка строк.

Библиотека stack_unwinding даёт возможность реализовать не только scope(exit) из языка D, но и scope(failure) и scope(success), так как предоставляет unwinding_indicator (позволяющий узнать завершился ли scope исключением или нет).

Вот полная реализация scope(exit)/scope(failure)/scope(success) в одном файле.

Также, на базе кода из stack_unwinding, аналогичная реализация есть в библиотеке Facebook.Folly. У Александреску даже есть выступление на эту тему:
http://vimeo.com/channels/ndc2014/97329153
http://rsdn.ru/forum/cpp/5637880.flat
Автор: Skorodum
Дата: 06.06.14
Re[3]: Покритикуйте код
Здравствуйте, andyp, Вы писали:

EP>>[/ccode]init возвращает ScopeGuard, который при отсутствии commit'а сделает uninit в деструкторе. А с использованием stack_unwinding commit можно вообще убрать.

A>Евгений, можешь рассказать, чего я глобально лишаюсь, используя только standalone версию библиотеки + лямбды в качестве action? Тяжеловато продраться через бустовский чудеса с препроцессором.

Boost.ScopeExit писался в первую очередь для pre-C++11 кода. Например там эмулируются локальные функции, в то время как в C++11 уже есть готовые лямбды. Ничем не уступающая реализация ScopeExit, и даже превосходящая, в C++11 займёт всего два десятка строк.

Библиотека stack_unwinding даёт возможность реализовать не только scope(exit) из языка D, но и scope(failure) и scope(success), так как предоставляет unwinding_indicator (позволяющий узнать завершился ли scope исключением или нет).

Вот полная реализация scope(exit)/scope(failure)/scope(success) в одном файле.

Также, на базе кода из stack_unwinding, аналогичная реализация есть в библиотеке Facebook.Folly. У Александреску даже есть выступление на эту тему:
http://vimeo.com/channels/ndc2014/97329153
http://rsdn.ru/forum/cpp/5637880.flat
Автор: Skorodum
Дата: 06.06.14