2011-11-26 9 views
11

bir Objective-C tipi type göz önüne alındığında, kolayca Çeşidi encodingencoding ve boyut size edinebilirsiniz:nasıl tek tek bir kodlama sahip olduğu sizeof bir tür elde edebilirsiniz?

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

biraz farklı, biz eşleştirmeleri

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

Bu iki soru yükseltir var koy :

(1), sadece bir kodlama bilgisi yerine bir türü olan daha olduğunu varsayalım. Elimizdeki her type type_t

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

böyle bir işlev zaten mevcut mu bunun için bir haritalayan

sizeofencodedtype: const char * -> size_t 

böyle elde etmek güzel olur? Eğer değilse, biri nasıl inşa edilir?

(2) İdeal bir haritalayan

decode: const char * -> type_t 

yapmak @encode eşleme ters olabilir ama gerçek bir C türü değil bu type_t beri mümkün görünmemektedir. Ben dili eklenecek @decode beklemek sanırım, ama bu çok gerçekçi ya zamana duyarlı değil. Ancak, kodlamayı kullanarak çalışma zamanında bir tür oluşturmak mümkün olmaz mı?

Referanslar: Objective-C Runtime Programming Guide - Type Encodings

cevap

12

NSGetSizeAndAlignment() sizin için bunu yapabilirsiniz. Aynı dizede birden fazla türde aracılığıyla grope çalışıyorsanız, bu da yararlı bir fonksiyon.

+0

teşekkür ederiz! Bu ihtiyacım olan _exactly_. –

+1

Bunu söylemenin farklı yollarını anlamaya çalışıyorum muhtemelen iki saat geçirdim ve yönlendiren bir sorudan onun üzerine tökezledi. Teşekkür ederim! –

İlgili konular