1

Объясню что я хочу на примере C# кода

var a = 5;

// имеет тип Action
SomeGlobal = new Action(() => Console.WriteLine(a));

теперь в любом месте кода я могу выполнить SomeGlobal.Invoke(); и в консоль выведется 5.

А вот плюсы не дают такого сделать. Плюсы ничего не знают о переменной a и как ее передать, если SomeGlobal типа Action безо всяких параметров я не представляю. Да и мне это не нужно, потому что та функция, которая будет выполнять эту лямбду тоже ничего не знает о переменной a.

Помогите записать это в С++/CLI

UPD:

В общем такая конструкция не работает

int a = 5;
SomeGlobal = gcnew Action([a]()
{
    Console::WriteLine(a);
});

UPD2:

Текст ошибки на английском выглядит так

local lambda is not allowed in a member function of a managed class type

То есть я не могу в управляемом коде использовать лямбда-выражение?

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119
iRumba
  • 5,946
  • Какой тип принимает конструктор Action? – Lapshin Dmitry Dec 09 '15 at 07:55
  • @LapshinDmitry, это не имеет значение. Та же ошибка будет если просто написать auto l = [](){ }; – iRumba Dec 09 '15 at 08:10
  • В таком случае это какая-то особенность CLI, потому что в C++ это абсолютно валидный код. Интересно. – Lapshin Dmitry Dec 09 '15 at 09:17
  • @LapshinDmitry, в функции main этот код рабочий, но когда это внутри ref class - уже не работает – iRumba Dec 09 '15 at 09:20
  • http://ru.stackoverflow.com/questions/473127/c-cli-%D0%B4%D0%B5%D0%BB%D0%B5%D0%B3%D0%B0%D1%82%D1%8B-%D0%BB%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-action – Pavel Mayorov Dec 09 '15 at 10:48

0 Answers0