中間結果を発現のテンプレート
-
13-09-2019 - |
質問
C++テンプレートMetaprogramming:コミュニケーション能の技術力を超えて
...欠点表現のテンプレートがいを書く、複雑な表現が評価だけが遅れまでの代入演算子はメソッドが呼び出されます。場合にプログラマを望の再利用は一部の中間結果なの評価では早く、彼女が強制を宣言するのには複雑なタイプのように:
Expression<
Expression<Array,plus,Array>,
plus,
Expression<Array,minus,Array>
> intermediate = a + b + (c - d);
(た。通知をどのようにこなうと重複しを反映して構造のcomputationandいが必要となる場合があるとして持つ式の変化をも凌駕する存在でありたいのですか?これは長年の問題のためのC++DSELs.通常の回避策を使用することで、表現を用停止、消去その場合は間隔で動の派遣.また最近では、養Bjarne Stroustrup自身、再利用の歴史的経緯で残自動キーワードをタイプを控除し、変数の宣言、その上で書き直されなければいけません。
auto intermediate = a + b + (c - d);
この機能が、大きなチャンスにもなります。C++DSEL著者およびユーザーにも...
でこの問題を解決する現在のc++の標準(C++0X)
例えば、いくの表現:
Expr内のX、Y
マトリクスA、B、C、D
X=A+B+C
Y=X+C
D=X+Y
場オペレーター:=評価の表現の新します。
解決
今のところ、あなたは常に<のhref = "http://www.boost.org/doc/libs/1_40_0/doc/html/typeof/refe.html#typeof.auto" のrel = "nofollowをnoreferrerを使用することができます「C ++ 0xのの自動キーワードの代わりに> BOOST_AUTO()のがより簡単に中間結果を取得します。
Matrix x, y;
BOOST_AUTO(result, (x + y) * (x + y)); // or whatever.
所属していません StackOverflow