2010-01-25 10 views
5

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?

+2

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

Odpowiedz

Powiązane problemy