C++ 为什么boost的模板化程度如此之高?

C++ 为什么boost的模板化程度如此之高?,c++,boost,C++,Boost,在boost中有很多地方,我看到一个模板化的类,不禁想为什么编写它的人使用模板 例如,互斥类。所有互斥体概念都是作为模板实现的,在模板中可以简单地创建几个基类或抽象类,并使用与该概念匹配的接口 回答后编辑:我考虑过虚拟函数的成本,但有时为了更好地理解,难道不值得付出很少的性能代价吗?我的意思是,有时(特别是使用boost),由于误用模板,很难理解模板化代码和解密编译器错误。模板可以在编译时进行高度优化,而不需要虚拟函数。许多模板技巧可以被认为是编译时多态性。既然您在编译时知道需要哪些行为,为什么

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

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


回答后编辑:我考虑过虚拟函数的成本,但有时为了更好地理解,难道不值得付出很少的性能代价吗?我的意思是,有时(特别是使用boost),由于误用模板,很难理解模板化代码和解密编译器错误。

模板可以在编译时进行高度优化,而不需要虚拟函数。许多模板技巧可以被认为是编译时多态性。既然您在编译时知道需要哪些行为,为什么每次使用该类时都要为虚拟函数调用付费呢。另外,许多模板化代码可以轻松内联,以消除最基本的函数调用开销


此外,C++中的模板非常强大和灵活,它们已经被证明是一个图灵完整的语言。使用模板可以很容易地完成一些事情,这些事情需要对运行时多态性进行更多的工作。

模板允许您完成算法的通用版本。容器的通用版本。您不再需要担心类型,您所生成的内容也不再需要与类型绑定。Boost是一个库,它试图解决日常生活中使用C++的各种各样的人的需求。

对这个人来说是个好问题:(Booost .Trand的作者):C++社区的主要哲学是“你只得到你所要求的”。Boost项目正在尝试,就像STL一样,通过使用模板设计所有库来遵循这一理念。不过,正如你所提到的,这是有代价的:理解有时会受到影响。如果你想要一个更容易理解的库,也许你应该看看Qt库。它包含了Boost的许多功能,还有更多!在我看来,QT的设计允许大规模C++开发,有些东西完全没有提升。