5.2.5. 模板实例化

ARM 编译器自动进行所有模板实例化,并确保链接后每个模板实体只保留一个定义。 编译器通过在已命名公共节中发出模板实体来实现此功能。 因此,链接器将删除所有重复的公共节(即具有相同名称的公共节)。

Note

可以使用 --pending_instantiations 编译器选项限制给定模板的并发实例化次数。

有关详细信息,另请参阅--pending_instantiations=n

隐式包含

启用隐式包含后,编译器假定,如果它需要定义来实例化在 .h 文件中声明的模板实体,则可以隐式地包含相应的 .cc 文件以获取该定义的源代码。 例如,如果在 xyz.h 文件中声明了模板实体 ABC::f,并且在编译中需要实例化 ABC::f,但是编译处理的源代码中没有出现 ABC::f 定义,编译器将检查 xyz.cc 文件是否存在。 如果该文件存在,编译器将处理该文件,就像将该文件包含在主源文件末尾一样。

要查找给定模板实体的模板定义文件,编译器必须知道用于声明模板的文件的完整路径名,以及是否使用系统包含语法(例如,#include <file.h>)包含了该文件。 对于包含 #line 指令的预处理源代码,该信息不可用。 因此,编译器不会尝试隐式包含含有 #line 指令的源代码。

编译器查找定义文件后缀 .cc.CC

可以使用命令行选项 --implicit_include--no_implicit_include 打开或关闭隐式包含模式。

仅在正常文件编译期间执行隐式包含,即在未使用 -E 命令行选项时。

有关详细信息,请参阅命令行选项

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential