代码之家  ›  专栏  ›  技术社区  ›  Sasha

现代C++设计泛型编程及应用的设计模式[COND]

  •  18
  • Sasha  · 技术社区  · 15 年前

    我已经为我们公司的团队购买了这本书,也许是为了提高我们的设计技能,并最终拥有更好的编程实践。当我读到它时,我发现,大多数情况下,一组漂亮的技巧可以用于模板,但不确定它是否值得——并且不损害将它合并到我们的代码中,从而引入代码复杂性/可读性和不可维护性。

    我想从跟随实践者那里知道,你从那本书中使用了什么?什么是与专业软件开发相关和重要的,应该避免什么?

    关于这本书的一般性思考,以及它如何适应大规模系统的软件开发(在同一本书上,我喜欢约翰·拉科斯的书)?

    亚历山德里斯科效应是什么?

    8 回复  |  直到 15 年前
        1
  •  22
  •   JaredPar    15 年前

    在标准模板使用之外,我发现关于通用C++编程的信息最有用的操作是使用模板创建无效代码场景的编译时错误的能力。一旦掌握了它的窍门,您就可以非常有效地将一个运行时bug类转化为编译时错误。

    我在工作中做得很成功。当然,它会产生完全无法阅读的信息,我的同事偶尔会过来问“这是什么?”但每次都是一个bug,他们无法编译它。我也对这些特定的错误进行了大量的评论,希望它是可以理解的。

        2
  •  15
  •   Daniel Earwicker    15 年前

    大约2005,我得到了大量的表达式模板和各种编译时间技巧,用于制作非常有表现力的库,比如C++中嵌入的内部域特定语言。尤其是一个相当完整的嵌入式SQL,类似于后来在.NET上作为LINQ出现的情况。

    对于用户来说,这很好。但是对于除了我以外的任何人来说,它呈现出一个巨大的陡峭的学习曲线。这就是它的问题所在;就像任何“聪明”的技术一样,它减少了能够维护它的人的数量。

    这对于广泛使用的类库是很好的,一般用户根本不需要了解类库的本质。但是对于特定团队拥有的“内部”图书馆来说,他们可能都需要能够修补它或者明智地扩展它。在我的经验中,C++模板的更神秘的可能性似乎排除了这一点。

    不过很有趣。

        3
  •  6
  •   Mykola Golubyev    15 年前

    如果你的公司/项目允许提升。这本书将帮助你发现一些提高魔法只是为了你自己的满意度。

    如果你的公司/项目不允许提升。这本书将是一个很好的指南,重新创建一些您最需要的增强部分,如boost::function。

    我相信在每个项目中都有某种实用模块。这本书将帮助您通过借用一些书籍建议的模式和sfinae技巧,使您的“实用性”更加通用和安全。

    这本书的大部分内容将展示如何重新思考一些GOF设计模式,用静态的方式改变运行时多态性。

        4
  •  3
  •   j_random_hacker    15 年前
    • 我直接从书中使用什么?没有-我不使用loki或boost。
    • 它影响了我的代码吗?不是真的-在我读这本书之前,我对政策的概念很熟悉
    • 值得一读吗?一定地!
        5
  •  2
  •   David Rodríguez - dribeas    15 年前

    对我来说,这更像是一次开阔心胸的经历。我通读了这本书,不断地学习细节和技巧,其中一些是我后来用过的。但最重要的部分是,大写D的设计一直在书中讨论(D语言没有双关语)。

    关于智能指针的一章将我的“提供所有可能的功能”的思想转变为更保守的:考虑一下你提供了什么,它值得吗?它怎么能破解密码?它能帮助用户吗?它会通过创建微妙的陷阱使代码变得脆弱吗?

    基于策略的设计部分应该让您在设计类是否可以/应该更好地划分为较小的正交单元时有所收获。虽然在大多数情况下,我不会最终划分为所有这些策略类,但由于不同的正交部分较少纠缠,代码通常会变得更干净。

    哦,作为Earwicker,我的第一反应是实施一些花哨的东西,这些东西确实加速了开发的一部分,但是再一次,在一家小公司里,我是唯一能够维护它的人,这真的是个问题。别做过头了。调试和维护所需的脑力是开发所需的两倍。

        6
  •  1
  •   Nemanja Trifunovic    15 年前

    imho,阅读(和理解!)这本书的第一章很有用(我相信它甚至可以免费在线阅读)。这本书的其余部分基本上描述了loki图书馆的内部结构,我并不推荐它。

        7
  •  0
  •   Nikhil    15 年前

    当我使用现代C++设计的东西时,我确实遇到过一些粗鲁的反应。首先,wtf评论。接下来是“不要太聪明”的评论。然后,更好地理解这些想法。然后,最后,接受这些想法,直到它们成为共同词汇的一部分。

    一定要把这本书的多份副本放在手边。理想情况下,为每个开发人员购买一个副本。此外,在这些东西成为开发人员的常用词汇之前,请在您的评论中引用模式/习惯用法和相关页面。

        8
  •  0
  •   arsaKasra    11 年前

    我没有使用loki,但我在以前的工作中积极使用boost。Boost从这本好书中实现了许多想法;

    本书中的内容不适用于业务逻辑,它们应该在库(Boost、Loki,您自己的东西)和业务逻辑中使用的库中实现。“在代码中使用此技巧”或“使用此技巧实现分离的库,并在大多数代码中使用漂亮的库(例如boost::bind-不好看的实现,但使用起来不错-但几乎看不到此实现)”。

    这本书还演示了强大的C++元程序设计和良好的大脑训练。