Objective-Cは、プリミティブに1文字のタイプのエンコーディングを使用します。たとえば、'c'
is char
、'i'
is int
。これらは、Obj-Cランタイムリファレンスに記載されています。
enum
これらをモデル化した既存のものはありますか?
Objective-Cは、プリミティブに1文字のタイプのエンコーディングを使用します。たとえば、'c'
is char
、'i'
is int
。これらは、Obj-Cランタイムリファレンスに記載されています。
enum
これらをモデル化した既存のものはありますか?
そのようなものはありませんenum
。エンコーディングは、最初はコンパイラによって構築されます。コンパイラは、コードにリテラル文字列を埋め込むだけです。あなたはそれらをASTContext.cpp
、特にメソッドgetObjCEncodingForTypeImpl()
とで見ることができますgetObjCEncodingForPrimitiveKind()
。
ランタイムライブラリには、これらの文字列を読み取る一連の関数がobjc-typeencoding.mmにあります。これらは自分で使用できます。そのコードは、Appleのオープンソースライセンスの下で利用できます。(コンパイラASTContext
には、これを行うためのメソッドもありますDecodeTypeFromStr()
。)
明らかに、ランタイムとコンパイラは、これらのエンコーディングに関して同期を維持する必要があります。実際、型のエンコード文字を変更するとバイナリの非互換性が生じるため、まったく発生する可能性は低く、通知なしではありません。ランタイムガイドのリストを信頼して安定させることができます。
もちろん、物事が追加されないというわけではありません。ブロックのエンコーディング文字列であり、導入される前は存在していませんでした(ただし、関数ポインタを示すに"@?"
類似しているか、から派生しています)。"^?"
また、 libffiとBlocksのリンクに関するMike Ashの記事にも興味があるかもしれません。この記事では、エンコード文字列を読み取ってその実際の型を生成する一連のマクロを示しています。