3

そのため、* thisポインターを返すことにより、カスケードメンバー関数呼び出しを調べました。機械的にどのように機能するかはわかりますが、ドット演算子を使用して1つのラインチェーン関数呼び出しのマイナーな機能を取得するための関数を実装するための多大な時間の投資のようです。単にメンバー関数呼び出しを短縮する以外にも、他にもいくつかの利点があるはずですが、この主題に関する情報は実際にはあまりありません。グーグルの最初の数ページは、カスケードされた関数呼び出しを実装する方法についての指示だけを思いついただけで、このテクニックが役立つかもしれない理由、方法、または場所については何も思いつきませんでした。誰かが主題をより深くカバーするかもしれないいくつかの有用なリンクを持っていますか?ありがとう。

4

2 に答える 2

5

利点は、操作の連鎖が理にかなっている場合に、クラスのユーザーにとって見栄えの良いコードです。例えば:

 rect.left( 10 ).top( 5 ).right( 50 ).bottom( 40 );

それはどちらよりも読む方が良いかもしれません:

 // longer code
 rect.left( 10 );
 rect.top( 5 );
 rect.right( 50 );
 rect.bottom( 40 );

または:

 // reader should remember order of parameters
 rect.move_to( 10, 5, 50, 40 ); 
于 2012-10-16T04:08:24.517 に答える
2

そして時々、私が推測する非常にまれですが、私はそのような使用を見ました(通常はユニットテストで):

  • オブジェクトの構築にある程度の柔軟性が追加されます(引数の順序に従う必要も、オーバーロードされたコンストラクターを多数追加する必要もありません)
  • ロジックを表すと便利ですOR(たとえば、フラグを設定する場合)
于 2012-10-16T07:28:50.740 に答える