C++ 函数模板实例化是否未导出到其他编译单元(如果是内联的)?
我观察到这样一种奇特的现象:如果模板函数实例化只用于内联,g++将不会导出它们。。当然,对于常规的非模板函数,情况并非如此。例如:C++ 函数模板实例化是否未导出到其他编译单元(如果是内联的)?,c++,templates,C++,Templates,我观察到这样一种奇特的现象:如果模板函数实例化只用于内联,g++将不会导出它们。。当然,对于常规的非模板函数,情况并非如此。例如: // main.cpp #include <iostream> #include "inc.h" int main() { std::cout << func<3>() << std::endl; std::cout << func2() << std::endl; r
// main.cpp
#include <iostream>
#include "inc.h"
int main() {
std::cout << func<3>() << std::endl;
std::cout << func2() << std::endl;
return 0;
}
// inc.h
template<int num>
int func();
int func2();
// a.cpp
template<int num>
int func() {
return num;
}
int func2() {
return 5;
}
int result;
int result2;
void instantiate() {
// store the results in globally visible variables
// so the compiler won't optimize them out completely
result = func<3>();
result2 = func2();
}
//main.cpp
#包括
#包括“inc.h”
int main(){
std::不可能复制显式实例化是不切实际的:你为什么这么认为?代码实例化了数百个专门化,很快就会发展成数千个。:p然后将所有模板代码放入头文件,不要担心。