문제

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

Looks really cool.

However,

  1. I don't understand it.
  2. I don't see examples it.
  3. I don't see examples of ideas hard to express in C++ as is, but trivial to express in blocks.

Can anyone enlighten me on this?

도움이 되었습니까?

해결책

Blocks are, essentially, a way to pass code and scope around as data. They're known in some other languages as closures and anonymous functions.

Here's an article with more details and code examples.

다른 팁

NanoTech already linked to an explanation of blocks. As for how this relates to C++ let me state my personal opinion: This extension is not useful in C++. Here's why:

Regarding the block reference type: We already have "polymorphic functions" which can carry some state around, see boost::function, tr1::function. C++ will include a polished version of this in its next standard library. The advantage over "C Blocks" is that you don't need to mess with things like Block_copy and Block_release. These polymorphic functions objects are smart enough to do their own memory managing.

Regarding the block literal syntax: It's a nice syntax that allows you to put the code where it "belongs" without the need for much boilerplate code. But the same applies to its C++ counter part: C++0x lambdas. But C++0x lambda feature also allows you to use lambda objects in tight inner loops without high performance costs of function calls due to possible inlining.

Since C++0x lambdas can be also used in situations where performance is an issue and std::function is easier to handle w.r.t. memory management the addition of "C Blocks" to C++ seems redundant. "C blocks" seem to be more tailored to languages that don't support templates or destructors.

They're basically just Apple's term for closures/anonymous functions. As Nikolai notes, they're how you use Grand Central Dispatch to run multiple functions in parallel (thus using more than 1 core) without having to worry about threading and locking.

As far as I understand this extension is for Apple's Grand Central Dispatch framework. Blocks are tiny schedulable/queue-able entities to be potentially run in parallel.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top