5

ウィキペディアの記事では、いくつかのテンプレート クラスを提供しています。実際のコードで使用したい。どうやってやるの?Vecオブジェクトをインスタンス化する方法はほとんどないことがわかりました。

4

1 に答える 1

2

Expression Templates に関する Wikibooks の記事は、特に最後の部分でより多くの洞察を提供します。

上記の例は、コンパイル時に再帰型がどのように生成されるかを示していません。また、 expr はまったく数式のようには見えませんが、実際には数式です。次のコードは、次のオーバーロードされた + 演算子の繰り返しインスタンス化を使用して、型が再帰的に構成される方法を示しています。

template< class A, class B >
DExpression<DBinaryExpression<DExpression<A>, DExpression<B>, Add> >
operator + (DExpression<A> a, DExpression<B> b)
{
  typedef DBinaryExpression <DExpression<A>, DExpression<B>, Add> ExprT;
  return DExpression<ExprT>(ExprT(a,b));
}

上記のオーバーロードされた operator+ は 2 つのことを行います。つまり、構文糖衣を追加し、コンパイラの制限によって制限された再帰的な型合成を可能にします。したがって、次のように評価の呼び出しを置き換えるために使用できます。

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression.
于 2011-12-13T23:12:57.933 に答える