Как на самом деле использовать шаблон выражения - PullRequest
5 голосов
/ 14 декабря 2011

В статье Википедии , она предоставляет несколько шаблонных классов.Я хочу использовать это в реальном коде.Как я могу это сделать?Я обнаружил, что я почти не могу создать экземпляр объекта Vec.

1 Ответ

2 голосов
/ 14 декабря 2011

Статья 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));
}

Вышеуказанный перегруженный оператор + выполняет две функции - добавляет синтаксический сахар и включает рекурсивныйкомпозиция типов, ограниченная пределами компилятора.Поэтому его можно использовать для замены вызова для оценки следующим образом:

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...