Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
Вопрос про Lambda-выражения.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вопрос про Lambda-выражения. (Прочитано 4134 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yudjin
Помогающий
Offline
Пол:
Вопрос про Lambda-выражения.
«
:
19-06-2011 12:06 »
Добрый день. Решил вернуться из .net к темной стороне, и вот понадобились лямбды сразу же.
Есть такое определение функции:
Код:
void CMyClass::SomeFunc(void (*func)(int), std::fstream &file);
Использую:
Код:
SomeFunc([&blob, &file] (int index)
{
//. . .
}
,file);
Собственно, не понятна причина ругани, если лямбды в C++0x означают то же, что лямбды в C#:
Error: no suitable conversion functions from "lambda[] void(int index)" to "void(*)(int)" exist.
Записан
Dimka
Деятель
Команда клуба
Offline
Пол:
Re: Вопрос про Lambda-выражения.
«
Ответ #1 :
19-06-2011 13:24 »
yudjin
, насколько я понимаю, во всех таких языках, куда внедряют лямбды, они являются не функциями, а функторами - т.е. экземплярами неявно генерируемого класса, в котором есть специальный метод, реализующий тело лямбда-функции, но главное (!) внутри этого экземпляра сохраняется контекст вызова - т.е. в случае C++0x связываются переменные, указываемые в квадратных скобках.
По этой причине лямбда не сводима к функции, у функции - нет и быть не может контекста. Наверно более правильным будет поставить в соответствие класс с перегруженным оператором (). Так, как это делается в STL.
«
Последнее редактирование: 19-06-2011 13:26 от Dimka
»
Записан
Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
(Модератор:
Вад
) > Тема:
Вопрос про Lambda-выражения.
Загружается...