C++模板常见问题和技巧

2015-03-06 20:44:00
admin
原创 2027
摘要:C++模板常见问题和技巧、定义、(问题1 - 模板未定义,不能实例化)、(问题2 - 编译速度缓慢,目标文件体积膨胀)、(模板特化、偏特化什么时候使用?)、附件下载

一、定义

C++模板说白了其实就是一个代码生成器(实例化就是代码生成的过程)。


二、问题1 - 模板未定义,不能实例化

此种错误一般是把模板申明放在头文件,模板定义放在cpp文件引起的。

原因:模板实例化要进行代码生成,如果查找不到模板定义,将无法进行代码生成。


三、问题2 - 编译速度缓慢,目标文件体积膨胀(WPS全部工程编译要几个小时)

模板的解析和实例化是相当复杂的,抛开编译器优化,做为码农我们能做的一般有二点:

1、尽量少用模板

2、使用显示实例化,原因如下:

template <class T>
T add(T a, T b) { return a + b; };

隐式实例化(每个POI处都要进行解析和代码生成):
add<int>(1, 2);//需要实例化

add<int>(3, 4);//需要实例化

显示实例化(解析和代码生成只进行一次):

extern template int add<int>(int, int);//显示实例化申明

add<int>(1, 2);//不需要实例化

add<int>(3, 4);//不需要实例化

template int add<int>(int, int);//在此实例化


四、模板特化、偏特化什么时候使用?

模板本来是一个通用的代码生成器,为何又来了特化和偏特化呢?因为有些代码需要特殊生成,不标准。如下例子:



五、附件下载

cpp_template.cpp

    发表评论
    评论通过审核之后才会显示。