 |
|
C++对模板的分离式编译问题的解答 |
出处:PConline 责任编辑:ljx |
[03-10-27 15:55]
| 作者:pongba/CSDN
| -
这就是大概的过程。其中关键就是:
编译main.cpp时,编译器不知道f的实现,所有当碰到对它的调用时只是给出一个指示,指示连接器应该为它寻找f的实现体。这也就是说main.obj中没有关于f的任何一行二进制代码。
编译test.cpp时,编译器找到了f的实现。于是乎f的实现[二进制代码]出现在test.obj里。
连接时,连接器在test.obj中找到f的实现代码[二进制]的地址[通过符号导出表]。然后将main.obj中悬而未决的call XXX地址改成f实际的地址。
完成。
然而,对于模板,你知道,模板函数的代码其实并不能直接编译成二进制代码,其中要有一个“具现化”的过程。举个例子:
//----------main.cpp------//
template
void f(T t)
{}
int main()
{
…//do something
f(10); //call f 编译器在这里决定给f一个f的具现体
…//do other thing
}
ad
相关文章:
VC++实现拨号上网程序详解
利用C++Builder让软件字幕动起来
微软推出嵌入式Visual C++ 4.0 SP2
| |  | -
|  |