7

http://clang.llvm.org/docs/BlockLanguageSpec.txt

本当にかっこよく見えます。

でも、

  1. わかりません。
  2. 例が見当たりません。
  3. アイデアをそのまま C++ で表現するのは難しいが、ブロックで表現するのは簡単だという例は見当たりません。

誰でもこれについて教えてもらえますか?

4

5 に答える 5

10

NanoTech はすでにブロックの説明にリンクされています。これが C++ にどのように関連するかについて、私の個人的な意見を述べさせてください。この拡張機能はC++ では役に立ちません。理由は次のとおりです。

ブロック参照型について: 何らかの状態を持ち運ぶことができる「多態性関数」が既にあります。 boost::functiontr1:: function を参照してください。C++ は、次の標準ライブラリにこれの洗練されたバージョンを含める予定です。Block_copy「C ブロック」に対する利点は、や などをいじる必要がないことですBlock_release。これらのポリモーフィック関数オブジェクトは、独自のメモリ管理を行うのに十分スマートです。

ブロック リテラルの構文について: これは、多くのボイラープレート コードを必要とせずに、コードが「属する」場所にコードを配置できる優れた構文です。しかし、同じことが C++ のカウンター部分であるC++0x lambdasにも当てはまります。ただし、C++0x ラムダ機能を使用すると、インライン化の可能性による関数呼び出しのパフォーマンス コストを高くすることなく、タイトな内部ループでラムダ オブジェクトを使用することもできます。

C++0x ラムダは、パフォーマンスが問題で、std::function の方がメモリ管理に関して扱いやすい状況でも使用できるため、C++ への「C ブロック」の追加は冗長に思えます。「C ブロック」は、テンプレートやデストラクタをサポートしていない言語により適しているようです。

于 2010-03-07T12:39:28.890 に答える
0

私が理解している限り、この拡張機能は Apple のGrand Central Dispatchフレームワーク用です。ブロックは、潜在的に並行して実行される小さなスケジュール可能/キュー可能なエンティティです。

于 2010-03-07T03:43:55.267 に答える