对块进行类型定义是如何工作的
Posted
技术标签:
【中文标题】对块进行类型定义是如何工作的【英文标题】:How does typedef-ing a block works 【发布时间】:2013-02-24 23:51:36 【问题描述】:在 C/Obj-C 中,我们执行类似 typedef int MYINT;
的 typedef,这很清楚。
为一个块做 typedef -typedef void (^MyBlock) (int a);
现在,我们可以使用MyBlock
。
不应该是-typedef void (^MyBlock) (int a) MyBlock;
类似于#define
吗?
语法如何工作?
【问题讨论】:
【参考方案1】:参见“块编程主题”中的Declaring a Block Reference:
块变量保存对块的引用。您使用声明它们 类似于用于声明指向函数的指针的语法, 除了你使用 ^ 而不是 *。
所以
typedef void (^myBlock) (int a);
使用与
相同的语法定义块的类型 typedef void (*myFunc) (int a);
声明一个函数指针。
参见例如Understanding typedefs for function pointers in C 了解有关函数指针的更多信息。
【讨论】:
【参考方案2】:同样来自“块编程主题”,为块创建类型应该是这样的:
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
【讨论】:
以上是关于对块进行类型定义是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章