2017-11-28 8 views
0

スコット・マイヤーズはMatrixためoperator+が戻りオブジェクト場合、式C++プロキシクラスを利用

Matrix sum = m1 + m2 + m3 + m4

は、(すべてのオブジェクトタイプMatrixを持っている場合)、「はるかに効率的に計算することができることを、「効果的な現代のC++」で述べていますつまり、の2つのオブジェクトに対してoperator+のオブジェクトは、Matrixオブジェクトの代わりにSum<Matrix, Matrix>のようなプロキシクラスのオブジェクトを返します。これは、初期化式全体をエンコードします。つまり、のようになります。 "

プロキシクラスは他のクラスの動作をエミュレートし、暗黙的なコンバージョンを行うことを理解していますが、この場合のプロキシアプローチはどのように効率的ですか?

よろしく

+0

まあ、あなたのコード例では、あなたが 'sum'から読んだことがないので、プロキシのアプローチでは何も追加する必要はありません。 – Sneftel

+0

私はC++プロキシに精通していませんが、結果が必要になるまで連鎖操作の評価を遅らせる連鎖遅延評価のようです。 – texasbruce

+0

おそらく**表現テンプレート**はあなたが探しているものです。 –

答えて

0

は、ヒープからその要素にストレージを割り当てなければならないのでMatrixは、任意のサイズの行列であるかもしれないことを考慮してください。 2つのマトリックスを一緒に加えることは、記憶域を割り振り、要素ごとのコピーを行うことを意味します。

上記の式では、(m1 + m2)に1回の割り当てを行い、その結果をm3に加算し、それをm4に加算する3回目を意味します。

追加では、追加するものを参照するだけで追加を表すプロキシが返された場合、最後の割り当てには1回のみ割り当てます。

舞台裏での作業が増えれば、必要に応じて必要な結果マトリックスの要素だけをさらに怠惰に計算することができます。

しかし、これらのことは常にトレードオフであり、それぞれの場合のコストとメリットを評価する必要があります。

+0

ありがとうございました! – Dusan

関連する問題