考虑一个程序包含用AA.hpp
编译的文件A1.hpp
,A1.cpp
,main.cpp
和g++ -std=c++11 main.cpp A1.cpp
。
// file AA.hpp
template < int > struct AA;
// file A1.hpp
#include "AA.hpp"
template <> struct AA<1> { /*implementation goes here...*/ };
extern template struct AA<1>;
// file A1.cpp
#include "A1.hpp"
template struct AA<1>;
// file main.cpp
#include "A1.hpp"
int main()
{
AA<1> a1;
// use a1 ...
return 0;
}
将此与没有A1.cpp
并且A1.hpp
中没有明确的实例化声明的情况进行比较。我会在第一个场景中获得任何编译时间的好处吗?为什么?
另一个问题。如果我按A1.cpp
建立g++ -std=c++11 -shared -o libA1.so A1.cpp
的共享库,然后使用g++ -std=c++11 -lA1 main.cpp
生成可执行文件,该怎么办? A1
中man.cpp
函数的调用是否会引用libA1.so
中的代码,还是会在可执行文件中生成(内联或不内联)?