对C ++表达式模板系统的创建有什么好的介绍?我想表达对用户定义类型的算法,同时避免临时值(可能很大),并学习如何直接执行此操作而不是应用现有库。
我找到了Todd Veldhuizen's original paper和Josuttis C++ Templates book中的示例,以及Kreft & Langer的文章。在Modern C++的课程的第6讲中提到了,回顾Josuttis.POOMA库background很好地介绍了表达模板。
我正在寻找简单,明确的论述。
答案 0 :(得分:7)
我发现Expression Templates Demystified得到了相当好的解释。首先介绍如何在没有模板的情况下实现数学表达式,并展示基本构建块和概念。
本文的第二部分展示了如何重构初始实现以使用模板来改进性能和减少代码。
IMO,这篇文章是“C ++模板:完整指南”中表达模板章节的一个很好的替代品。
答案 1 :(得分:5)
您应该获得 C++ Templates: The Complete Guide 的副本。
您链接的代码示例没有附带的文本,这非常有用(表达式模板的章节长度为22页)。没有文本,你所拥有的只是代码,没有任何评论或解释它的作用以及它是如何以及为什么这样做。
答案 2 :(得分:2)
我强烈建议您查看Eric Niebler Boost.Proto库。 可以在C ++上找到非常精细的介绍材料 - 下一篇:
http://cpp-next.com/archive/2010/08/expressive-c-introduction/
他在boost'con 2010上的演讲也非常有趣
答案 3 :(得分:0)
除了科学c ++书籍之外,你已经拥有了所有的资源,这本书真的只是原始论文(无论如何都是这个话题)而且已经过时了。您可以查看C ++ Template Metaprogramming,了解更多使用表达式模板构思构建的现代技术,但“简单”之类的东西在它变得简单之前不会随时可用。
答案 4 :(得分:0)
我建议在Boost Operators - Arithmetic审核Boost运营商。这些是模板化的方法,扩展了基本的算术和比较操作。
答案 5 :(得分:0)
对于您想要做的事情,您应该查看 Boost.ublas 的代码,因为它确实如此。
从文件vector.hpp
开始,然后返回层次结构(vector<>
的父级)。矩阵有点复杂,但机制是一样的。
现在我建议不要尝试重新尝试库的复杂性,例如ublas_expression
等等。您可以通过将类型作为基础对象然后实现二元运算符来更简单地实现它。
请看这里:http://www.bnikolic.co.uk/blog/cpp-expression-minimal.html