Вопрос

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

Выглядит очень круто.

Однако,

  1. Я этого не понимаю.
  2. Я не вижу примеры это.
  3. Я не вижу примеры идей трудно выражать в C ++, как есть, но тривиально выразить в блоках.

Может кто-нибудь просветить меня на этом?

Это было полезно?

Решение

Блоки, по сути, способ пройти код и объем вокруг данных. Они известны на некоторых других языках в качестве закрытия и анонимных функций.

Вот а статья С более подробными деталями и примерами кода.

Другие советы

Nanotech уже связан с объяснением блоков. Что касается того, как это относится к C ++, позвольте мне указать мое личное мнение: это расширение нет полезно в C ++. Вот почему:

Что касается типа ссылочного типа: у нас уже есть «полиморфные функции», которые могут нести некоторое состояние вокруг, см. Boost :: Функция, TR1 :: Функция. Отказ C ++ будет включать в себя полированную версию этого в своей следующей стандартной библиотеке. Преимущество над «C блоками» состоит в том, что вам не нужно беспорядок с вещами, такими как Block_copy а также Block_release. Отказ Эти полиморфные функции объекты достаточно умны, чтобы сделать свое собственное управление памятью.

Что касается блочного литерального синтаксиса: это хороший синтаксис, который позволяет вам поместить код, в котором он «принадлежит» без необходимости намного кода котел. Но то же самое относится и к его C ++ CO счетницей: C ++ 0x лямбдас. Отказ Но функция лямбда C ++ 0x также позволяет использовать объекты лямбда в жестких внутренних циклах без высоких затрат на производительность функционных вызовов из-за возможного встроителя.

Поскольку C ++ 0x Lambdas также можно использовать в ситуациях, когда производительность представляет собой проблему, а STD :: Функция легче обрабатывать управление памятью WRT, добавление «блоков C» на C ++ кажется избыточным. «C блоки», кажется, более адаптированы к языкам, которые не поддерживают шаблоны или деструкторы.

Они в основном просто термин Apple для замыкание/ анонимные функции. Как отмечает Nikolai, они, как вы используете Grand Central Dispratch для запуска нескольких функций параллельно (таким образом, используя более 1 ядра) без необходимости беспокоиться о резьбе и блокировке.

Насколько я понимаю, это расширение для Apple Гранд Центральная отправка фреймворк. Блоки являются крошечными планируемыми / способами, способными могут быть потенциально запускаются параллельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top