How can one obtain the sizeof a type for which one has an encoding?
Asked Answered
L

1

11

Given an Objective-C type type, one can obtain the encoding encoding and size size of the type easily:

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

Put a little differently, we have mappings

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

This raises two questions:

(1) Suppose that rather than having a type, we have only an encoding. It would be nice to obtain a mapping

sizeofencodedtype: const char * -> size_t

such that for every type_t type we have that

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

Does such a function already exist? If not, how might one go about building one?

(2) Ideally we could invert the @encode mapping to make a mapping

decode: const char * -> type_t

but this doesn't seem to be possible since type_t isn't a real C type. I guess I could wait for @decode to be added to the language, but that's not very realistic or time-sensitive. But should it not be possible to instantiate a type at runtime using its encoding?

References: Objective-C Runtime Programming Guide - Type Encodings

Lundgren answered 26/11, 2011 at 21:23 Comment(0)
S
12

NSGetSizeAndAlignment() can do this for you. It's also a useful function if you're trying to grope through multiple types in the same string.

Sleeping answered 26/11, 2011 at 21:27 Comment(1)
I spent probably two hours trying to figure out different ways of saying this and stumbled upon it from a referring question. Thank you!Naughton

© 2022 - 2024 — McMap. All rights reserved.