c++ - 在定义之前显式实例化模板函数
问题描述
如果首先出现声明,是否允许在函数定义之前显式实例化模板函数?
例如,以下是否允许:
// declaration
template <typename T>
void foo(T param);
// explicit instantiation
template void foo<int>(int);
// definition of primary template
template <typename T>
void foo(T param) {}
一般来说,它似乎可以编译,但当然这只是一个关于它是否被允许的温和指示。
解决方案
在[temp.explicit]中没有明确禁止它的内容。此外,还有一个显式声明([temp.explicit#5]):
函数模板、变量模板、类模板的成员函数或静态数据成员、或类或类模板的成员函数模板的声明应在该实体的显式实例化之前。
如果需要定义,则本段将有所不同(即,它将需要定义),因此您的代码似乎合法。