Jedną z fajnych nowych funkcji C++ w Visual Studio 2010 są wyrażenia lambda. Jednak nie mogę ich zmusić do pracy w zarządzanej klasie.Wygląda na to, że Lambdas nie działa w klasach ref w VS2010
class UnmanagedClass {
void Foo() {
// Creating empty lambda within unmanaged class.
// This compiles fine.
auto lambda = [](){ ; };
}
};
ref class ManagedClass {
void Foo() {
// Creating empty lambda within managed class.
// This creates error C3809:
// A managed type cannot have any friend functions/classes/interfaces.
auto lambda = [](){ ; };
}
};
Mój najlepszy przypuszczenie to, że kompilator tworzy anonimową klasę funkcjonować jako klasy znajomego, chociaż nigdy nie używam członków klasy. Wydaje się to oznaczać, że lambdas nie mogą być używane w ogóle w klasach ref.
Byłem bardzo szczęśliwy, gdy przeczytałem, że VS2010 dodaje wyrażenia lambda do C++. Czy ktokolwiek wie, jak zmusić ich do pracy w ramach klas ref?
Aby być uczciwym, lambda należy do standardu C++ 0x. C++/CLI jest zupełnie inny i nie powinieneś * tak naprawdę * oczekiwać, że wszystko przeniesie się właśnie tak. (Przy okazji, może to tylko twój styl, ale nie potrzebujesz pustego ';' w lambda.) – GManNickG