5 c++ templates expression-templates
在维基百科文章中,它提供了一些模板类.我想在实际代码中使用它.我怎样才能做到这一点?我发现几乎没有办法让我实例化一个Vec对象.
关于表达式模板的 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));
}
Run Code Online (Sandbox Code Playgroud)
上面的重载运算符 + 做了两件事 - 它添加了语法糖并启用了递归类型组合,但受编译器的限制。因此,它可以用来替换对评估的调用,如下所示:
evaluate (a.begin(), a.end(), x + l + x);
/// It is (2*x + 50.00), which does look like a mathematical expression.
Run Code Online (Sandbox Code Playgroud)