【问题标题】:Why is boost so heavily templated?为什么 boost 的模板化程度如此之高?
【发布时间】:2009-02-24 18:12:52
【问题描述】:

在 boost 中有很多地方我看到了一个模板化的类,不禁想到为什么编写它的人使用模板。

例如,互斥类。所有互斥锁概念都作为模板实现,可以简单地创建几个基类或抽象类,并使用与该概念匹配的接口。

在回答后编辑:我考虑了虚函数的成本,但有时为了更好地理解而放弃很少的性能损失难道不值得吗?我的意思是有时(尤其是使用 boost),由于滥用模板,很难理解模板化代码和解密编译器错误。

【问题讨论】:

  • 对这个人来说是个好问题:stackoverflow.com/users/5597/anthony-williams(boost.thread 的作者):p
  • C++ 社区的主要理念是“你只得到你想要的”。 Boost 项目正在尝试,就像 STL 一样,通过使用模板设计所有库来遵循这一理念。但是,正如您所提到的,这是有代价的:理解有时会受到影响。如果你想要一个更容易理解的库,也许你应该看看 Qt 库。它包含 Boost 的大部分功能以及更多功能!在我看来,Qt 的设计允许大规模 C++ 开发,这是 Boost 完全缺乏的。

标签: c++ boost


【解决方案1】:

模板可以在编译时进行高度优化,而不需要虚拟函数。许多模板技巧可以被认为是编译时多态性。既然你在编译时就知道你想要什么样的行为,为什么你每次使用这个类时都要为虚函数调用付费。作为奖励,许多模板化代码可以轻松内联,以消除最基本的函数调用开销。

此外,C++ 中的模板非常强大和灵活——它们已被证明是一种图灵完备的语言。有些事情很容易用模板完成,但需要更多的运行时多态性工作。

【讨论】:

    【解决方案2】:

    模板允许您执行算法的通用版本。容器的通用版本。您不再需要担心类型,并且您生成的内容不再需要与类型绑定。 Boost 是一个库集合,旨在满足在日常生活中使用 C++ 的各种人的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多