web-dev-qa-db-ja.com

ブロックのtypedefingの仕組み

C/Obj-Cでは、この_typedef int MYINT;_のようなtypedefを行いますが、これは明らかです。

ブロックに対してtypedefを行う-typedef void (^MyBlock) (int a);

これで、MyBlockを使用できます。

typedef void (^MyBlock) (int a) MyBlock;は_#define_に似ていますか?

構文はどのように機能しますか?

46
user1559227

「ブロックプログラミングのトピック」の ブロック参照の宣言 を参照してください。

ブロック変数は、ブロックへの参照を保持します。関数へのポインタを宣言するために使用する構文と同様の構文を使用して宣言しますが、*の代わりに^を使用します。

そう

 typedef void (^myBlock) (int a);

と同じ構文を使用してブロックのタイプを定義します

 typedef void (*myFunc) (int a);

関数ポインタを宣言します。

例参照 Cの関数ポインターのtypedefを理解する 関数ポインターの詳細について。

65
Martin R

また、「ブロックプログラミングトピック」から、ブロックのタイプを作成する方法は次のようになります。

typedef returnType (^blockName)(argument1, argument2, ...)

以下は、非常に単純で実用的な例です。

typedef float (^MyBlockType)(float, float);
MyBlockType AddTwoFloat = ^(float a, float b) {return a + b;};
MyBlockType MultiplyTwoFloat = ^(float a, float b) {return a * b;};
float c = AddTwoFloat(1, 2); //c = 3
float d = MultiplyTwoFloat(1, 2); //d = 2
22
fujianjin6471