【发布时间】:2011-02-13 16:00:57
【问题描述】:
一些缺点是
- 它的语法很复杂
- 编译器生成额外代码
【问题讨论】:
-
编译器生成额外的代码,我在某处(我认为是 Stroustrup 先生)读到现代编译器实际上没有——没有单条指令开销
-
我不赞成“复杂语法”的说法。如果您发现模板语法令人困惑,则应该专注于继续学习该语言,而不是挑剔它。并且 2 应该在很大程度上无关紧要,IIRC。
-
我认为额外的代码会发生,例如当您针对 N 个不同类型实例化您的模板化容器时,编译器会生成 N 个略有不同的容器代码版本。 (与经典方法相比,您手动编写可以容纳任何类型对象的单个容器类......在运行时不安全,但只生成一个容器代码副本)
-
@Checkers:如果您的编译器无法折叠从模板生成的重复相同代码,那么有一些技术可以 - 安全! - 在代码中执行此操作(例如基于
void*的所有T*实例,并在其周围使用精简的编译时包装器以确保类型安全)。 -
@anish 和 Checkers:您不需要包含通知的完整别名(而且您无法通知我;),请参阅blog.stackoverflow.com/2010/01/new-improved-comments-with-reply
标签: c++ templates generic-programming