Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про Lambda-выражения.  (Прочитано 4585 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« : 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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-06-2011 13:24 » 

yudjin, насколько я понимаю, во всех таких языках, куда внедряют лямбды, они являются не функциями, а функторами - т.е. экземплярами неявно генерируемого класса, в котором есть специальный метод, реализующий тело лямбда-функции, но главное (!) внутри этого экземпляра сохраняется контекст вызова - т.е. в случае C++0x связываются переменные, указываемые в квадратных скобках.

По этой причине лямбда не сводима к функции, у функции - нет и быть не может контекста. Наверно более правильным будет поставить в соответствие класс с перегруженным оператором (). Так, как это делается в STL.
« Последнее редактирование: 19-06-2011 13:26 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines