2011-11-26 72 views
11

給出一個Objective-C型type,人們可以很容易獲得類型的encodingencoding和大小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_ttype我們有

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

請問這樣的功能已經存在?如果不是,那麼如何去建設一個呢?

(2)在理想情況下,我們可以顛倒@encode映射,使映射

decode: const char * -> type_t 

,但這似乎並沒有因爲type_t成爲可能不是一個真正的C類型。我想我可以等待@decode被添加到該語言,但這不是很現實或時間敏感。但是應該不可能在運行時使用它的編碼實例化一個類型?

參考文獻: Objective-C Runtime Programming Guide - Type Encodings

回答

12

NSGetSizeAndAlignment()能爲你做到這一點。如果您試圖通過同一個字符串中的多個類型進行摸索,它也是一個有用的函數。

+0

謝謝!這是_exactly_我​​所需要的。 –

+1

我花了大概兩個小時試圖找出不同的方式來說這個,並從一個引用的問題偶然發現。謝謝! –