|
|
1
21
我认为一般规则适用。尽量减少代码各部分之间的耦合。将太大的模板头拆分为一起使用的较小的函数组,这样就不必在每个源文件中都包含整个内容。 另外,试着让头文件快速进入稳定状态,也许用一个较小的测试程序测试它们,这样当它们集成到一个较大的程序中时就不需要改变(太多)。
|
|
2
28
|
|
3
7
首先,为了完整起见,我将介绍简单的解决方案:只在必要时使用模板化代码,并基于非模板代码(在其自己的源文件中实现)。
举个例子:
好的,这会稍微改变调用:
这个例子是虚构的,但总的观点是正确的。注意,由于它的通用性
现在,一个
另一个(不太明显的)优点是,如果有完整性约束的话
广泛应用于工业生产中 促进 当然,你只需要包括你所做的事情,应该有静态C++代码分析器来报告包含但未使用的头文件,这可以帮助解决这个问题。 |
|
|
4
6
|
|
5
4
使用模板作为问题解决技术可能会导致编译速度减慢。一个典型的例子是C中的std::sort vs.qsort函数。这个函数的C++版本需要编译的时间更长,因为它需要在每个翻译单元中解析,因为几乎每个函数都使用这个模板创建不同的实例(假设通常将封闭类型作为排序谓词提供)。 尽管这些慢化是意料之中的,但是有一些规则可以帮助您编写高效的模板。其中四个描述如下。 基尔的统治
下面的C++特征/构造按编译顺序按降序排序:
在设计和开发Boost.TMP时,使用了基于上述规则的优化。尽可能避免使用顶级构造进行快速模板编译。 下面是一些示例,说明如何使用上面列出的规则。 减少模板实例化让我们看看std::conditional。其声明如下:
每当我们更改给定给该模板的三个参数中的任何一个时,编译器都必须为其创建一个新实例。例如,设想以下类型:
现在,以下所有内容都将以不同类型的实例化结束:
我们可以通过将conditional的实现更改为:
Odin Holmes' talk about the Kvasir library . 创建显式模板实例化
每当您怀疑模板的实例将经常被使用时,最好显式地实例化它。通常情况下,
为编译时算法创建专门化an example of this here . 在这个头文件中,排序算法是为255种类型的列表手动指定的。手动专门化加速了长列表的编译。 |
|
|
6
3
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |