【问题标题】:Is there a feature in c++ that equivalent to the "block" in objective c?c++ 中是否有与目标 c 中的“块”等效的功能?
【发布时间】:2014-10-04 18:19:54
【问题描述】:

正如标题所说。 c++ 中是否有与目标 c 中的“块”等效的功能? 谢谢。

【问题讨论】:

  • 如果您想知道,您的问题可能被否决了,因为通过快速谷歌搜索很容易回答。
  • @doctordoder 我不能同意。为了回答这个问题(因为我对 C++ 很熟悉),我开始阅读有关 blocks 的内容。我不得不承认——我找不到什么是“block”。我唯一能找到的是“如何定义一个块”,这在这种特殊情况下并不是很有帮助。实际上我花了一些时间才发现“一个块是一个独立的、自主的代码片段,总是存在于另一个编程结构的范围内,例如方法的主体”,这意味着它只是一个普通的代码片段......我在这个问题上花了太多时间:|
  • @PawełStawarz Google "what is a block in objective c",第一个链接是developer.apple.com/library/ios/documentation/cocoa/conceptual/…。这是第一段的引述,您对 C++ 非常熟悉,应该理解:“块是 Objective-C 对象,这意味着它们可以添加到 NSArray 或 NSDictionary 之类的集合中。它们还能够从封闭范围,使它们类似于其他编程语言中的闭包或 lambda。”
  • @doctordoder 那么-根据您提供的描述-我会说它们更像 functors (“...objects (...) 有能力从封闭范围捕获值...") 比 lambdas.
  • @PawełStawarz 不。 Lambda 还可以从封闭范围中捕获值。

标签: c++ ios objective-c objective-c-blocks


【解决方案1】:

lambda 表达式?

[&](){
    printf("Hello!");
}

【讨论】:

    【解决方案2】:

    是的,您可以在 c++ 11 中使用 std::function(lambda function)。这些函数的工作方式类似于目标 c 中的块

    定义

    typedef std::function<void(std::string message, bool status)> LoginCallback
    

    在类函数中使用

    void loginUser(std::string email, std::string password, LoginCallback loginCallback)
    

    假设上面的函数在LoginClass中

    函数调用

    loginClassObj.loginUser("abc@xyz.com", "password", [this](std::string message, bool status){//Callback will received here});
    

    【讨论】:

      【解决方案3】:

      它是 C 的非标准扩展。它是 lambda 函数的闭包,基本上它们是未命名的类似函数的实体,包含可以调用的代码。它们有助于编写例如事件驱动的代码,其中回调被详尽地使用。 参考this

      【讨论】:

        猜你喜欢
        • 2012-02-11
        • 2012-03-21
        • 1970-01-01
        • 2011-06-13
        • 2021-07-20
        • 1970-01-01
        • 2013-03-04
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多