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;
}