如何解析模板函数调用

时间:2014-09-26 16:51:37

标签: c++ templates

我很清楚模板函数基本上是在有特定调用时编译的。但在这个问题上,我正在寻找不同的东西。

我有以下源文件:

a.cpp:

template <class T>
void g(T x) {
    cout<<x<<"  g#1\n" ;
}
void f() ;
main() {
    g(10) ;
    g('c') ;
    f() ;
}

b.cpp:

template <class T>
void g(T x) {
    cout<<x<<"  g#2\n" ;
}
void f() {
    g(11) ;
}

现在我将代码编译为:

g++ a.cpp b.cpp

通过a.cpp中定义的模板函数解决了对g的所有三次调用(main中的2次和函数中的一次&#39; f&#39;)。

但是当我将代码编译为:

g++ b.cpp a.cpp

main中的调用g(10)和函数中的g(11)f&#39; f&#39;通过b.cpp中定义的模板函数解析,而main中的调用g(&#39; c&#39;)通过a.cpp中定义的模板函数解析

当然,如果删除了两个文件中定义的模板函数,则该特定文件会报告编译器错误。

有人可以提供所有这些观察的解释

特别是我想知道在目标文件生成a.o和b.o期间发生了什么样的函数调用解析。我的询问是关于如何在编译时解决调用,即当我说:

g++ -c a.cpp

g++ -c b.cpp

然后当我说:

时会发生什么
g++ a.o b.o

0 个答案:

没有答案