10

C++表达式模板系统的创建有哪些好的介绍?我想表达用户定义类型的算术,同时避免临时值(可能很大),并学习如何直接执行此操作而不是应用现有库。

我找到了Todd Veldhuizen 的原始论文Josuttis C++ Templates book中的一个示例,以及Kreft & Langer的一篇文章。在Modern C++课程的第6讲中提到过,回溯到Josuttis。POOMA库背景很好地引入了表达式模板。

我正在寻找简单、清晰的说明。

4

6 回答 6

7

我发现Expression Templates Demystified得到了很好的解释。它首先展示了如何在没有模板的情况下实现数学表达式,并展示了基本的构建块和概念。

本文的第二部分展示了如何重构初始实现以使用模板来提高性能并减少代码。

IMO,这篇文章是“C++ 模板:完整指南”中表达式模板章节的一个很好的替代品。

于 2011-07-15T03:49:15.797 回答
5

您应该获得一份C++ 模板:完整指南

您链接到的代码示例没有随附的文本,这很有帮助(关于表达式模板的章节长达 22 页)。没有文本,你所拥有的只是代码,没有任何注释或解释它的作用以及它如何以及为什么这样做。

于 2010-03-26T21:30:24.830 回答
2

我强烈建议查看 Eric Niebler Boost.Proto 库。在 C++-next 上可以找到非常好的介绍材料:

http://cpp-next.com/archive/2010/08/expressive-c-introduction/

他在 boost'con 2010 的演讲也很有趣

于 2011-05-04T03:34:02.733 回答
0

除了科学 c++ 书籍之外,您已经获得了所有资源,这实际上只是原始论文(无论如何都与这个主题相关)并且已经过时了。您可以查看 C++ 模板元编程,以了解从表达式模板思想构建的更现代的技术,但是“简单”的东西在变得简单之前不会很容易获得。

于 2010-03-26T21:30:44.253 回答
0

我建议在Boost Operators - Arithmetic查看 Boost Operators 。这些是扩展基本算术和比较操作的模板化方法。

于 2010-03-27T00:36:51.133 回答
0

对于您想要做的事情,您应该查看Boost.ublas的代码,因为它正是这样做的。

从文件开始vector.hpp,然后返回层次结构(的父级vector<>)。矩阵有点复杂,但机制是一样的。

现在我可能建议不要在第一次尝试时尝试重现库的复杂性,诸如此类ublas_expression。您可以通过使您的类型成为基础对象然后实现二元运算符来更简单地进行操作。

也看这里:http ://www.bnikolic.co.uk/blog/cpp-expression-minimal.html

于 2013-01-20T22:36:53.107 回答