如何实际使用表达式模板

时间:2011-12-13 23:08:34

标签: c++ templates expression-templates

the wikipedia article中,它提供了一些模板类。我想在实际代码中使用它。我怎样才能做到这一点?我发现我几乎没有办法实例化Vec对象。

1 个答案:

答案 0 :(得分:2)

Wikibooks article on Expression Templates提供了更多洞察力,尤其是最后一部分:

  

上面的示例没有显示在编译时如何生成递归类型。此外,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.