使用模板有什么缺点?

时间:2011-05-06 11:20:45

标签: c++

  

可能重复:
  What are the disadvantages of using templates?

阅读模板我发现,例如,如果你不使用类模板中的函数,它将不会为此生成代码(一件好事)。我还看到你可以使用模板和实现编译时编程,让我们说一个阶乘的例子,结果将在编译时知道。
所以我的问题是:使用模板的负面影响是什么?

谢谢。

7 个答案:

答案 0 :(得分:12)

编译时间。复杂的,特别是递归模板可以 age 进行编译。

错误消息。模板错误消息是可怕的,通常不是很有帮助。概念本来是伟大的,但遗憾的是语言委员会已将它们从即将出台的标准中删除。

<强>可读性即可。模板代码可能难以阅读。

难度许多潜在的技巧都依赖于语言标准中不太知名的方面,因此需要对语言的正确认识才能与他们相处。

答案 1 :(得分:9)

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

答案 2 :(得分:3)

  • 更长的编译时间
  • 难以阅读的编译器错误消息

答案 3 :(得分:3)

您无法在类virtual中创建模板成员函数。那就是:

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.

这通常会给程序员带来麻烦。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

它们可能会使用模板嵌套深度以指数方式增加可执行文件的大小。

它们可能会以指数方式增加编译时间。

编译器消息很难理解。

答案 6 :(得分:1)

  1. 通常不可能在调试器的监视窗口中解密您的类型,因为它们大约有一千个字符长。因此,您在调试器中点击了一个断点,打开监视窗口来检查您的地图,并在“类型”列中,您发现了一堆完全难以理解的文本。

  2. 过度杀伤的可能性。那就是用一切模板!但这需要程序员来决定。我只是说我见过程序员将它用于所有事情。