问题 如何获得具有编码的类型的大小?


给定Objective-C类型 type,一个人可以获得 编码  encoding 和大小 size 容易的类型:

const char *encoding = @encode(type);
size_t size = sizeof(type);

换句话说,我们有映射

@encode: type_t -> const char *
sizeof:  type_t -> size_t

这提出了两个问题:

(1)假设我们只有一个编码,而不是一个类型。获得映射会很不错

sizeofencodedtype: const char * -> size_t

这样每个人 type_t  type 我们有

sizeofencodedtype(@encode(type)) = sizeof(type)

这样的功能是否已经存在?如果没有,怎么可能建立一个?

(2)理想情况下我们可以反转 @encode 映射以进行映射

decode: const char * -> type_t

但这似乎不可能 type_t 不是真正的C类型。我想我可以等 @解码 要添加到语言中,但这不是很现实或时间敏感。但是,如果不能使用其编码在运行时实例化类型吗?

参考文献: Objective-C运行时编程指南 - 类型编码


11239
2017-11-26 21:23


起源



答案:


NSGetSizeAndAlignment() 能为你做到这一点。如果你试图在同一个字符串中摸索多个类型,它也是一个有用的函数。


12
2017-11-26 21:27



谢谢!这是 究竟 我需要什么。 - Nate Chandler
我花了两个小时试图找出不同的说法,并从一个引用问题中偶然发现它。谢谢! - Chris R. Donnelly


答案:


NSGetSizeAndAlignment() 能为你做到这一点。如果你试图在同一个字符串中摸索多个类型,它也是一个有用的函数。


12
2017-11-26 21:27



谢谢!这是 究竟 我需要什么。 - Nate Chandler
我花了两个小时试图找出不同的说法,并从一个引用问题中偶然发现它。谢谢! - Chris R. Donnelly