extern模板是否会减少完全专业化的编译时间?

时间:2017-04-26 15:23:24

标签: c++ c++11 templates shared-libraries extern

考虑一个程序包含用AA.hpp编译的文件A1.hppA1.cppmain.cppg++ -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生成可执行文件,该怎么办? A1man.cpp函数的调用是否会引用libA1.so中的代码,还是会在可执行文件中生成(内联或不内联)?

0 个答案:

没有答案