#cpp #cpp_cli
Имеется класс C++, написанный с применением управляемого кода. И вот нелегкая привела меня вызвать в данном классе в одном из методов любой из std::algorithm. Так вот, студия любезно указала, что лямбда - выражения использовать нельзя. Пришлось написать класс, и сделать его функтором. Так вот вопрос - почему запрещены лямбды? Код: public ref class edit_base { public: void test() { std::string line("abcdefg"); std::string lineNew; std::copy_if(line.begin(), line.end(), std::back_inserter(lineNew), [](const char& s) { if (s > 10 && s < 100) return true; return false; }); } } Пишу через 17 студию. Компилятор: 19.11.25547 Error: E2093 локальное лямбда-выражение не допускается в функции-члене класса управляемый
Ответы
Ответ 1
Да, это так. Лямбды компилируются как нативный локальный класс/структура, а такого не может быть внутри управляемого класса. Поэтому придётся вынести нужный метод наружу: ref class edit_base; void test(edit_base^ self) { // тут можно обращаться к полям класса (если надо, объявите эту функцию friend'ом) std::string line("abcdefg"); std::string lineNew; std::copy_if(line.begin(), line.end(), std::back_inserter(lineNew), [](const char& s) { if (s > 10 && s < 100) return true; return false; }); } public ref class edit_base { public: void test() { ::test(this); } };
Комментариев нет:
Отправить комментарий