Frage

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

sieht wirklich cool aus.

Allerdings

  1. Ich verstehe es nicht.
  2. Ich sehe nicht, Beispiele es.
  3. Ich sehe nicht, Beispiele für Ideen schwer in C ++ auszudrücken, wie, aber trivial in Blöcken zum Ausdruck bringen.

Kann jemand aufklären mich das?

War es hilfreich?

Lösung

Die Blöcke sind im Wesentlichen eine Art Code und Umfang weitergeben um als Daten. Sie sind in einigen anderen Sprachen als Verschlüsse und anonyme Funktionen bekannt.

Hier ist ein Artikel mit mehr Details und Code-Beispiele.

Andere Tipps

NanoTech bereits auf eine Erklärung von Blöcken verknüpft. Was, wie dies bezieht sich auf C ++ lassen Sie mich meine persönliche Meinung abgeben: Diese Erweiterung ist nicht , die in C ++. Hier ist der Grund:

In Bezug auf den Block Referenztyp: Wir haben bereits „polymorphe Funktionen“, die um einige Zustand führen können, finden Sie unter boost :: function , tr1 :: function . C ++ wird eine polierte Version dieses in seiner nächsten Standard-Bibliothek. Der Vorteil gegenüber „C Blocks“ ist, dass Sie nicht mit Dingen wie Block_copy und Block_release zu verwirren brauchen. Diese polymorphen Funktionen Objekte sind intelligent genug, um ihre eigene Speicherverwaltung zu tun.

In Bezug auf den Block Literalsyntax: Es ist eine nette Syntax, die Sie den Code platzieren können, wo sie ohne die Notwendigkeit für viel Standardcode „gehört“. Aber das gleiche gilt für das C ++ Gegenstück: C ++ 0x lambdas . Aber C ++ 0x auch Lambda-Funktion können Sie Lambda-Objekte in engen inneren Schleifen ohne Hochleistungskosten von Funktionsaufrufen verwenden wegen möglicher inlining.

Da C ++ 0x lambdas können auch in Situationen eingesetzt werden, in denen die Leistung ist ein Problem, und std :: Funktion ist einfacher zu handhaben w.r.t. Speicherverwaltung die Zugabe von „C Blocks“ zu C ++ scheint überflüssig. „C-Blöcke“ zu sein scheinen mehr zugeschnitten auf Sprachen, die Vorlagen oder Destruktoren nicht unterstützen.

Sie sind im Grunde nur Ausdruck von Apple für Schließungen / anonyme Funktionen. Wie Nikolai Notizen, sind sie, wie Sie Grand Central Dispatch verwenden, um mehrere Funktionen parallel laufen zu lassen (also mehr als 1 Kern verwendet wird), ohne sich um Threading und Verriegelung zu sorgen.

Soweit ich diese Erweiterung zu verstehen ist für Apple Grand Central Dispatch Rahmen. Die Blöcke sind winzige planbare / queue-able Einheiten möglicherweise parallel ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top