Страницы

Поиск по вопросам

понедельник, 2 марта 2020 г.

Лямбда-выражения и управляемый код

#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); } };

Комментариев нет:

Отправить комментарий