Mam projekt ObjectiveC++. W kontekście ObjectiveC używam ARC i iPhoneSDK 6. W C++ używam kompilatora C++ 11.Używanie funkcji lambda C++ 11 w ARC ObjectiveC++ - jak zrobić to poprawnie?
Funkcje Lambda w C++ 11 przechwytują zmienne z odniesieniami. Ta koncepcja nie jest tak naprawdę wspierana przez ObjectiveC, a przez "try and error" wymyśliłem następujące rozwiązanie. Czy są jakieś pułapki, o których nie wiem?
Czy istnieje lepsze rozwiązanie tego problemu?
typedef std::function<void()> MyLambdaType;
...
// m_myView will not go away. ARC managed.
UIView * __strong m_myView;
...
// In Objective C context I create a lambda function that calls my Objective C object
UIView &myViewReference = *m_myView;
MyLambdaType myLambda = [&myViewReference]() {
UIView *myViewBlockScope = &myViewReference;
// Do something with `myViewBlockScope`
}
..
// In C++11 context I call this lambda function
myLambda();
Dlaczego nie użyć bloku? – kennytm
Bloki AFAIK to tylko ObjectiveC, lub? Jak przekazać blok do C++? –
Czy 'MyLambdaType myLambda = [m_myView]() {// Czy coś z m_myView}' nie działa? – newacct