C++ extern模板会减少完全专门化的编译时间吗?

C++ extern模板会减少完全专门化的编译时间吗?,c++,c++11,templates,shared-libraries,extern,C++,C++11,Templates,Shared Libraries,Extern,假设一个程序由文件AA.hpp、A1.hpp、A1.cpp和main.cpp组成,这些文件是用g++-std=c++11 main.cpp A1.cpp编译的 //文件AA.hpp 模板struct-AA; //文件A1.hpp #包括“AA.hpp” 模板结构AA{/*实现在这里…*/}; 外部模板结构AA; //文件A1.cpp #包括“A1.hpp” 模板结构AA; //文件main.cpp #包括“A1.hpp” int main() { AA a1; //使用a1。。。

假设一个程序由文件
AA.hpp
A1.hpp
A1.cpp
main.cpp
组成,这些文件是用
g++-std=c++11 main.cpp A1.cpp
编译的


//文件AA.hpp
模板struct-AA;

//文件A1.hpp
#包括“AA.hpp”
模板结构AA{/*实现在这里…*/};
外部模板结构AA;

//文件A1.cpp
#包括“A1.hpp”
模板结构AA;

//文件main.cpp
#包括“A1.hpp”
int main()
{
AA a1;
//使用a1。。。
返回0;
}

将此与没有
A1.cpp
A1.hpp
中没有显式实例化声明的场景进行比较。在第一个场景中,我会得到编译时间方面的好处吗?为什么

另一个问题。如果我通过
g++-std=c++11-shared-o libA1.so A1.cpp
创建
A1.cpp
的共享库,然后使用
g++-std=c++11-lA1 main.cpp
创建可执行文件,会怎么样?
man.cpp
中对
A1
函数的调用是指
libA1中的代码。因此
还是将在可执行文件中生成(内联或非内联)?

的可能副本
// 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;
}