使用模板的缺点是什么

What is the downside of using templates?

本文关键字:缺点 是什么      更新时间:2023-10-16

可能重复:
使用模板的缺点是什么?

通过阅读模板,我发现,例如,如果你不使用类模板中的函数,它就不会为此生成代码(这是一件积极的事情(。我还看到,您可以使用模板使用编译时编程并实现,比如说一个阶乘示例,结果将在编译时知道
所以我的问题是:使用模板有哪些负面影响?

谢谢。

编译时间。复杂的,尤其是递归模板可能需要的时间才能编译。

错误消息。模板错误消息很可怕,通常没有太大帮助。概念本来会很棒,但遗憾的是,语言委员会已经将它们从即将发布的标准中删除了。

可读性。模板代码可能很难阅读。

难度许多潜在的技巧都依赖于语言标准中不太为人所知的方面,因此需要对语言有足够的了解才能与之相处。

为了让客户端使用您开发的模板,您必须交付源代码。这可能是我在实践中遇到的最严重的缺点。

  • 更长的编译时间
  • 较难读取的编译器错误消息

不能使类中的模板成员函数成为虚拟的。即:

class Foo{
public:
    template<typename T>
    void doSomething(const T& aThing);
    virtual void somethingElse();
//rest of class
};
class Bar : public Foo{
public:
    template<typename T>
    void doSomething(const T& aThing);
    virtual void somethingElse();
};
Foo* var = new Bar();
var->doSomething(1); //will call Foo's method, not Bar.
var->somethingElse(); //will call Bar's method.  It's polymorphic.

这经常给程序员带来问题。

  1. 语法令人生畏
  2. 调试从模板生成的代码并不容易
  3. 您必须在标题中提供所有代码。没有知识产权

它们可能会随着模板嵌套深度的增加而成倍地增加可执行文件的大小。

它们可能会成倍地增加编译时间。

编译器消息可能很难理解。

  1. 通常不可能在调试器的监视窗口中破译类型,因为它们大约有一千个字符长。因此,你在调试器中遇到了一个断点,打开观察窗口检查地图,在"类型"列中,你会收到一堆完全无法加密的文本。

  2. 过度杀伤的可能性。这就是对所有事情都使用模板!但这是留给程序员来决定的。我只是说我见过程序员什么都用它。