C にはクロージャがないと聞いたことがありますが、今日、Objective-C でクロージャが使用されているのを見ました。クロージャーは C ではなく Objective-C でサポートされていますか?
更新:すべての回答に感謝します。 ブロックに関するこのガイドもウェブで見つけました:http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1
C にはクロージャがないと聞いたことがありますが、今日、Objective-C でクロージャが使用されているのを見ました。クロージャーは C ではなく Objective-C でサポートされていますか?
更新:すべての回答に感謝します。 ブロックに関するこのガイドもウェブで見つけました:http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1
Apple added the ^
operator to add closure support. It is not tied to Objective-C however, and can be used in C and C++ as well, as long as you compile the project with Apple's brach of GCC or LLVM. This new feature is called blocks.
C には、関数ポインターとデータ ポインターの両方を含むアプリケーション定義の構造体の形式のクロージャーがあります。問題は、( のようなqsort
) コールバック ポインターを受け取る多く/ほとんどのインターフェイスが関数ポインターのみを受け入れ、対応するデータ ポインターを受け入れないため、それらにクロージャーを渡すことができないことです。
ところで、理論的には、コンパイラの助けを借りずにライブラリ レベルでクロージャ サポートを追加することは可能です。つまり、クロージャへの関数ポインタを返すライブラリを作成します。ただし、ライブラリ コードは実装/マシンに依存します。実行可能コード用のスペースを割り当て、固定ポインター値 (クロージャー オブジェクトの一部として保存される) を他の引数と共に関数に渡すコードを生成する必要があります。