我有一个 ObjectiveC++ 项目。在 ObjectiveC 上下文中,我使用 ARC 和 iPhoneSDK 6。在 C++ 中,我使用 C++11 编译器。
C++11 中的 Lambda 函数使用引用捕获变量。ObjectiveC 并不真正支持这个概念,通过“尝试和错误”我想出了以下解决方案。有没有我不知道的陷阱?
这个问题有更好的解决方案吗?
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();