如何获得已编码类型的大小?

11

给定一个 Objective-C 类型 type,可以轻松地获取该类型的 encoding 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类型。我想我可以等待@decode被添加到语言中,但这不是非常现实或时间敏感的。但是,在运行时使用其编码实例化类型不应该是可能的吗?
参考资料: Objective-C Runtime编程指南-类型编码
1个回答

12

NSGetSizeAndAlignment()可以帮您完成此操作。如果您试图在同一字符串中处理多种类型,这也是一个有用的函数。


1
我花了大约两个小时尝试不同的表达方式,最终在一个相关问题的引用中偶然发现了这个答案。谢谢! - Chris R. Donnelly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接