如何实际使用表达式模板

发布于 2024-12-21 02:20:12 字数 162 浏览 2 评论 0原文

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

In the wikipedia article, it provides some template classes. I want to use it in actual code. How can I do that? I found there is almost no way for me to instantiate a Vec object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬心 2024-12-28 02:20:12

有关表达式模板的 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.

The Wikibooks article on Expression Templates provides more insight, especially the last part:

The above example does not show how recursive types are generated at compile-time. Also, expr does not look like a mathematical expression at all, but it is indeed one. The code that follows show how types are recursively composed using repetitive instantiation of the following overloaded + operator.

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));
}

The above overloaded operator+ does two things - it adds syntactic sugar and enables recursive type composition, bounded by the compiler's limits. It can therefore be used to replace the call to evaluate as follows:

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文