【问题标题】:Tutorials and Introductions to C++ Expression TemplatesC++ 表达式模板教程和介绍
【发布时间】:2011-02-01 09:10:04
【问题描述】:

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

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

我正在寻找简单,清晰的阐述。

【问题讨论】:

  • Boost lambda 库似乎使用了这种技术。根据我的经验,它使用起来非常麻烦,并且仍然有很多限制;如果对它的工作原理也没有简单的解释,我不会感到惊讶。
  • boost::lambda 与表达式模板的用途不同。

标签: c++ templates arrays metaprogramming expression-templates


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你应该得到一份C++ Templates: The Complete Guide的副本。

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

    【讨论】:

    • Vandevoorde 和 Josuttis 有唯一真正完整的描述。这个话题永远不会是简单,因为这是一个既复杂又困难的话题,但他们做得最好。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          现在我建议不要尝试重现库的复杂性作为第一次尝试,例如 ublas_expression 和类似的东西。您可以通过将您的类型作为基础对象然后实现二元运算符来实现这一点更简单。

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

          【讨论】:

            猜你喜欢
            • 2010-09-11
            • 1970-01-01
            • 1970-01-01
            • 2012-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多