使用 -qtempinc 的示例
以下示例显示了当模板声明和定义位于不同的文件中时,编译器如何管理模板的隐式实例化。 此示例包含以下源文件:
- 模板声明文件:
a.h - 相应的模板实现文件:
a.t - 主程序源文件:
a.cpp
模板声明文件: a.h
struct IC {
virtual void myfunc() = 0;
};
template <class T> struct C : public IC{
virtual void myfunc();
};
#ifndef __TEMPINC__
#include "a.t"
#else
#pragma implementation("a.t")
#endif模板实现文件: a.t
此文件包含从 main 程序调用的 myfunc 函数的模板定义。
template <class T> void C<T>::myfunc() {}主程序文件: a.cpp
此文件创建需要隐式实例化的对象。
#include "a.h"
int main() {
IC* pIC = new C<int>();
pIC->myfunc();
} 可以使用以下命令来编译主程序
a.cpp:xlC -qtempinc a.cpp备注信息:
如果指定了 -qnotempinc ,则包含模板实现文件;否则,如果指定了 -qtempinc ,则 #pragma implementation指令会指示编译器找到模板实现文件的路径。
如果未指定 #pragma implementation指令,则编译器默认将a.c作为模板执行文件进行搜索。