阅读模板我发现,例如,如果你不使用类模板中的函数,它将不会为此生成代码(一件好事)。我还看到你可以使用模板和实现编译时编程,让我们说一个阶乘的例子,结果将在编译时知道。
所以我的问题是:使用模板的负面影响是什么?
谢谢。
答案 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)
答案 5 :(得分:1)
它们可能会使用模板嵌套深度以指数方式增加可执行文件的大小。
它们可能会以指数方式增加编译时间。
编译器消息很难理解。
答案 6 :(得分:1)
通常不可能在调试器的监视窗口中解密您的类型,因为它们大约有一千个字符长。因此,您在调试器中点击了一个断点,打开监视窗口来检查您的地图,并在“类型”列中,您发现了一堆完全难以理解的文本。
过度杀伤的可能性。那就是用一切模板!但这需要程序员来决定。我只是说我见过程序员将它用于所有事情。