使用 -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
备注信息:
  • 基于 XL 的前端开始如果指定了 -qnotempinc ,则包含模板实现文件;否则,如果指定了 -qtempinc ,则 #pragma implementation 指令会指示编译器找到模板实现文件的路径。
  • 基于 XL 的前端开始如果未指定 #pragma implementation 指令,则编译器默认将 a.c 作为模板执行文件进行搜索。