http://clang.llvm.org/docs/BlockLanguageSpec.txt
本当にかっこよく見えます。
でも、
- わかりません。
- 例が見当たりません。
- アイデアをそのまま C++ で表現するのは難しいが、ブロックで表現するのは簡単だという例は見当たりません。
誰でもこれについて教えてもらえますか?
http://clang.llvm.org/docs/BlockLanguageSpec.txt
本当にかっこよく見えます。
でも、
誰でもこれについて教えてもらえますか?
NanoTech はすでにブロックの説明にリンクされています。これが C++ にどのように関連するかについて、私の個人的な意見を述べさせてください。この拡張機能はC++ では役に立ちません。理由は次のとおりです。
ブロック参照型について: 何らかの状態を持ち運ぶことができる「多態性関数」が既にあります。 boost::function、tr1:: function を参照してください。C++ は、次の標準ライブラリにこれの洗練されたバージョンを含める予定です。Block_copy
「C ブロック」に対する利点は、や などをいじる必要がないことですBlock_release
。これらのポリモーフィック関数オブジェクトは、独自のメモリ管理を行うのに十分スマートです。
ブロック リテラルの構文について: これは、多くのボイラープレート コードを必要とせずに、コードが「属する」場所にコードを配置できる優れた構文です。しかし、同じことが C++ のカウンター部分であるC++0x lambdasにも当てはまります。ただし、C++0x ラムダ機能を使用すると、インライン化の可能性による関数呼び出しのパフォーマンス コストを高くすることなく、タイトな内部ループでラムダ オブジェクトを使用することもできます。
C++0x ラムダは、パフォーマンスが問題で、std::function の方がメモリ管理に関して扱いやすい状況でも使用できるため、C++ への「C ブロック」の追加は冗長に思えます。「C ブロック」は、テンプレートやデストラクタをサポートしていない言語により適しているようです。
ブロックとその機能の詳細については、次を参照してください。
私が理解している限り、この拡張機能は Apple のGrand Central Dispatchフレームワーク用です。ブロックは、潜在的に並行して実行される小さなスケジュール可能/キュー可能なエンティティです。