【发布时间】:2012-10-26 07:22:16
【问题描述】:
我有一个 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();
【问题讨论】:
-
AFAIK 块仅是 ObjectiveC,或者?如何将块传递给 C++?
-
MyLambdaType myLambda = [m_myView]() { // Do something with m_myView }不起作用吗? -
@newacct AFAIK 在这种情况下会创建一个副本。见这里:en.cppreference.com/w/cpp/language/lambda
-
@LarsSchneider:是的,
m_myView的副本,指向您的对象的指针。这不是你想要的吗? -
@newacct 我非常愚蠢。你是对的。你想创建一个“答案”,以便我给你答案吗?
标签: objective-c lambda c++11 automatic-ref-counting objective-c-blocks