对块进行类型定义是如何工作的

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

【讨论】:

以上是关于对块进行类型定义是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章

像自定义类一样构造的指针(内置类型)如何工作?

Nullable<int> 是“预定义的值类型”吗?或者 Equals() 和 == 如何在这里工作?

如何在 Python 中为类型定义别名以进行类型提示

JVM是如何进行方法调用的

如何使用 C++11 使用语法对函数指针进行类型定义?

关于Mybatis中使用自定义类型通过 自定义TypeHandler类型处理器进行类型转换的两种配置方案-枚举类型示例