Clang'阻止'如何工作?

ano*_*non 7 c++ objective-c clang objective-c-blocks clang-extensions

http://clang.llvm.org/docs/BlockLanguageSpec.txt

看起来很酷.

然而,

  1. 我不明白.
  2. 我没有看到它的例子.
  3. 我没有看到在C++中难以表达的想法的例子,但是在块中表达是微不足道的.

任何人都可以启发我吗?

小智 14

块本质上是一种将代码和范围作为数据传递的方法.它们在其他一些语言中被称为闭包和匿名函数.

这是一篇包含更多详细信息和代码示例的文章.

  • BTW*当前*版本的C++也有闭包,通过lambda语法. (12认同)
  • 顺便说一句,下一版本的C++也有闭包,通过lambda语法. (8认同)
  • 顺便说一下,C++的_previous_版本也有闭包,通过lambda语法. (3认同)

sel*_*tze 10

NanoTech已经与块的解释联系在一起.至于如何这涉及到C++让我说出我个人的意见:该扩展使用C++非常有用.原因如下:

关于块引用类型:我们已经有了"多态函数",可以携带一些状态,参见boost :: function,tr1 :: function.C++将在其下一个标准库中包含一个抛光版本."C Blocks"的优势在于你不需要像Block_copy和C这样的东西搞乱Block_release.这些多态函数对象足够聪明,可以进行自己的内存管理.

关于块文字语法:它是一个很好的语法,允许您将代码放在"所属"的位置,而无需太多的样板代码.但这同样适用于它的C++计数器部分:C++ 0x lambdas.但是C++ 0x lambda特性还允许您在紧密的内部循环中使用lambda对象,而不会因为可能的内联而导致函数调用的高性能成本.

由于C++ 0x中的lambda表达式可以在性能的情况下也可使用的问题和std ::功能是比较容易处理WRT内存管理除"C块"的,以C++似乎是多余的."C块"似乎更适合不支持模板或析构函数的语言.

  • @Jonathan:我没有发明这个词.请参阅当前的C++标准草案(N3092.pdf),第20.8.15节"多态函数包装器".它们是多态的,只要签名兼容,您就可以在其中包装任何函数对象.隐藏("擦除")包装对象的确切类型.这是通过"经典OOP多态性"(或类似的东西)实现的. (3认同)