| Мысль о BOOST_SCOPE_EXIT и лямбдах | |
| От: | Alexander G | ||
| Дата: | 04.09.08 20:59 |
Пример из документации:
Фактически, переменные commit и m_persons захватываются по ссылке и передаются как параметры статического метода, тело которого находится между макросами. Есть идея применить похожий подход для иммитации замыканий. Вместо деструктора тогда будет задаваться оператор().
Возникнет следующая трудность: шаблоны нельзя параметризовать локальными классами. Т.е. в std::for_each нельзя будет передать myFunction, если она типа локального класса (хотя в MSVC можно). Однако, проблема вроде решима. Структуру, хранящую ссылки на параметры, можно заменить на boost::tuple. Вложенный класс со статическим методом остаётся, но переменная myFunction не этого класса, а не-локального шаблонного класса. этот не-локальный шаблонный класс содержит три шаблонных параметра: сигнатура, tuple c параметрами и статический метод локального класса. Типа так:
Т.е. сам локальный класс в шаблонах не используется. Есть ли какие-либо очевидные проблемы (кроме сложности реализации) ? Кто-нибудь пробовал такое реализовать ? |
| Re: Мысль о BOOST_SCOPE_EXIT и лямбдах | |
| От: | jazzer | ||
| Дата: | 04.09.08 23:10 |
| Здравствуйте, Alexander G, Вы писали: AG>Пример из документации: AG>
AG>Фактически, переменные commit и m_persons захватываются по ссылке и передаются как параметры статического метода, тело которого находится между макросами. AG>Есть идея применить похожий подход для иммитации замыканий. Вместо деструктора тогда будет задаваться оператор(). Собственно, это обсуждалось во время review библиотеки, посмотри в списке рассылки. Как обычно, Стивен Ватанабе пришел с совершенно безумными решениями, Александреску отдыхает Алекс Насонов сейчас как раз и работает над тем, чтобы сделать полноценную библиотеку с замыканиями и локальными функциями. Так что если тебя эта тема интересует, можешь поговорить с ним непосредственно.
|
| Re: Ещё одна мысль туда же | |
| От: | Alexander G | ||
| Дата: | 05.09.08 06:44 |
| Не прикручивать захват. Захват делать вручную биндом. Тогда всё просто
|
| Re[2]: Мысль о BOOST_SCOPE_EXIT и лямбдах | |
| От: | Alexander G | ||
| Дата: | 05.09.08 06:45 |
| Здравствуйте, jazzer, Вы писали: J>Собственно, это обсуждалось во время review библиотеки, посмотри в списке рассылки. J>Как обычно, Стивен Ватанабе пришел с совершенно безумными решениями, Александреску отдыхает Нашёл обсуждение замыканий, но безумных решений Стивена не увидел. Есть ли вообще удобный способ искать по этим рассылкам ? J>Алекс Насонов сейчас как раз и работает над тем, чтобы сделать полноценную библиотеку с замыканиями и локальными функциями. J>Так что если тебя эта тема интересует, можешь поговорить с ним непосредственно. ок. |
| Re[3]: Мысль о BOOST_SCOPE_EXIT и лямбдах | |
| От: | jazzer | ||
| Дата: | 05.09.08 06:54 | ||
| Оценка: | 15 (1) ![]() | ||
| Здравствуйте, Alexander G, Вы писали: AG>Есть ли вообще удобный способ искать по этим рассылкам ? боюсь, что нету. Это тебе не RSDN AG>Нашёл обсуждение замыканий, но безумных решений Стивена не увидел. Ну вот, например. Одна из самых безумных вещей в С++, которые я видел: http://article.gmane.org/gmane.comp.lib.boost.devel/168837/ На всякий случай приведу код здесь, помедитируй над ним, прежде чем читать разъяснение — получишь большое интеллектуальное удовольствие
|
| Re[4]: Мысль о BOOST_SCOPE_EXIT и лямбдах | |
| От: | Alexander G | ||
| Дата: | 05.09.08 07:15 |
| Здравствуйте, jazzer, Вы писали: J>На всякий случай приведу код здесь, помедитируй над ним, прежде чем читать разъяснение — получишь большое интеллектуальное удовольствие Там спойлер в комментариях в main, но всё равно удовольствие получил |