将类成员函数的模板定义放在 CPP 文件中C++隐式实例化而不是 .H 允许吗?

Placing C++ template definition for a class member function in CPP file with IMPLICIT instantiation instead of .H allowed?

本文关键字:实例化 C++ 许吗 文件 函数 成员 CPP 定义      更新时间:2023-10-16

给定如下代码:

傅.cpp

#include"foo.h"
template <int X>
void bar::foo(){
cout << X << endl;
}
static void tea(){
bar().foo<1>();
bar().foo<2>();
bar().foo<3>();
}

福.H

class bar {
public:
template <int X>
void foo();
};

主.cpp

...
bar().foo<1>();
bar().foo<2>();
bar().foo<3>();
...

任何版本的C++都允许这种模式吗?

编辑:

当使用template void bar::foo<1>()(等(显式实例化允许它正确链接时,为什么不允许这样做?

C++编译器不需要实际为任何东西生成符号,除非你用extern声明强制它。它们聚合内联函数,这可能会删除实例化的所有证据。我尝试了你的例子,它与-O0有关,但与-O3无关。