2011-11-26 10 views
11

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

risposta

12

NSGetSizeAndAlignment() può fare questo per voi. È anche una funzione utile se stai cercando di tastare più tipi nella stessa stringa.

+0

Grazie! Questo è esattamente ciò di cui avevo bisogno. –

+1

Ho passato probabilmente due ore cercando di capire modi diversi di dire questo e siamo capitati da una domanda di riferimento. Grazie! –

Problemi correlati