Dato un tipo di Objective-C type
, si può ottenere il encodingencoding
e le dimensioni size
del tipo facilmente:Come si può ottenere la dimensione di un tipo per il quale si ha una codifica?
const char *encoding = @encode(type);
size_t size = sizeof(type);
Mettere un po 'diverso, abbiamo mappature
@encode: type_t -> const char *
sizeof: type_t -> size_t
Ciò solleva due questioni :
(1) Supponiamo che invece di avere un tipo, abbiamo solo una codifica. Sarebbe bello per ottenere una mappatura
sizeofencodedtype: const char * -> size_t
tale che per ogni type_ttype
abbiamo che
sizeofencodedtype(@encode(type)) = sizeof(type)
Fa una tale funzione esiste già? Altrimenti, come si può fare per costruirne uno?
(2) Idealmente si potrebbe invertire la @encode mappatura per fare una mappatura
decode: const char * -> type_t
, ma questo non sembra essere possibile in quanto type_t non è un vero e proprio tipo C. Credo che avrei potuto aspettare per @decode da aggiungere al linguaggio, ma non è molto realistico o time-sensitive. Ma non dovrebbe essere possibile istanziare un tipo in fase di esecuzione usando la sua codifica?
Riferimenti: Objective-C Runtime Programming Guide - Type Encodings
Grazie! Questo è esattamente ciò di cui avevo bisogno. –
Ho passato probabilmente due ore cercando di capire modi diversi di dire questo e siamo capitati da una domanda di riferimento. Grazie! –