2009-10-06 3 views
1

Я пытаюсь эффективно изучить и использовать блоки.Что означает «long long (^ blockFun)() = (long long (^)()) moreBlockFun« означает и делает?

В Интернете я наткнулся на этот код:

long long (^blockFun)() = (long long (^)())moreBlockFun; 

Я думаю, что он пытается создать блок, который ожидает блок, который возвращает длинный, и я думаю, что это делает какой-то кастинг где-то тоже.

ответ

7

Это тип блока и да, синтаксис невелик. Предположим, что moreBlockFun - это блок, который не принимает параметров и возвращает что-то с разумным приводом до долгого времени - подпись этого типа написана long long (^)(). Итак, мы создаем новое локальное имя для этого блока с именем blockFun с синтаксисом long long (^blockFun)() и выполним трансляцию.

Это беспорядок, в основном унаследованный от нотации типа указателя функции, который фактически каждый Программист C должен искать около 482 раз, прежде чем они его запомнят. Ты не один!

+1

ах ... удивительный. имеет смысл сейчас. есть ли какой-нибудь синтаксический сахар, который можно было бы посыпать всем этим, чтобы сделать его более читаемым? – pxl

+1

Вы можете (и должны) ввести 'typedef', чтобы вы могли написать «FooBlock» или аналогичный, чтобы сохранить основную часть всей подписи во всех точках. –

+0

спасибо, сделаю – pxl

Смежные вопросы