Имеется класс 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 локальное лямбда-выражение не допускается в функции-члене класса управляемый
Ответ
Да, это так. Лямбды компилируются как нативный локальный класс/структура, а такого не может быть внутри управляемого класса.
Поэтому придётся вынести нужный метод наружу:
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); }
};
Комментариев нет:
Отправить комментарий