在 boost 中有很多地方我看到了模板化的类,不禁思考为什么编写它的人使用模板。
例如,互斥锁类。所有互斥锁概念都作为模板实现,您可以在模板中简单地创建一些基类或具有与概念匹配的接口(interface)的抽象类。
回答后编辑:我考虑过虚函数的成本,但有时为了更好地理解而放弃很少的性能损失是否值得?我的意思是有时(尤其是在使用 boost 的情况下)真的很难理解模板化代码和解密由于误用模板而导致的编译器错误。
最佳答案
模板可以在编译时高度优化,而不需要虚函数。许多模板技巧都可以被认为是编译时多态性。既然你在编译时就知道你想要哪些行为,为什么每次使用该类时都要为虚函数调用付费。作为奖励,许多模板化代码可以轻松内联,以消除甚至是最基本的函数调用开销。
此外,C++ 中的模板非常强大和灵活 - 它们本身已被证明是一种图灵完备的语言。有些事情使用模板很容易完成,但需要更多的运行时多态性。
关于c++ - 为什么 boost 如此大量地模板化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582878/