2011-11-26 3 views
11

は、Objective-Cのタイプtypeを考えると、人は簡単タイプのencodingencodingとサイズsizeを得ることができます。どのように1つのエンコーディングを持つ型のサイズを取得できますか?

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

は少し違った、我々はマッピング

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

これは、2つの問題を提起してい置きます:

(1)タイプを持つのではなく、エンコーディングのみを持つとします。type type_tすべてののために、我々は

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

、このような機能がすでに存在することを持っているようにマッピング

sizeofencodedtype: const char * -> size_t 

を得ることがいいだろうか?そうでない場合、どのように建物を建てることができますか?

(2)理想的には、マッピング

decode: const char * -> type_t 

を作るために@encodeマッピングを反転さでしたが、type_tは、実際のCタイプではないので、これは可能ではないようです。私は@コードが言語に追加されるのを待つことができたと思いますが、それはあまり現実的ではなく、時間に敏感ではありません。しかし、そのエンコーディングを使って実行時に型をインスタンス化することはできませんか?

参考文献: Objective-C Runtime Programming Guide - Type Encodings

答えて

12

NSGetSizeAndAlignment()はあなたのためにこれを行うことができます。同じ文字列で複数の型を探す場合にも便利な機能です。

+0

ありがとうございました!これは私が必要としていたものです。 –

+1

私はたぶん2時間を費やしてこれを言い方を変えようとしましたが、言及する質問からそれを見つけました。ありがとうございました! –

関連する問題