Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数模板实例化是否未导出到其他编译单元(如果是内联的)?_C++_Templates - Fatal编程技术网

C++ 函数模板实例化是否未导出到其他编译单元(如果是内联的)?

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

我观察到这样一种奇特的现象:如果模板函数实例化只用于内联,g++将不会导出它们。。当然,对于常规的非模板函数,情况并非如此。例如:

// 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然后将所有模板代码放入头文件,不要担心。