首页 > 解决方案 > 在定义之前显式实例化模板函数

问题描述

如果首先出现声明,是否允许在函数定义之前显式实例化模板函数?

例如,以下是否允许:

// 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) {}

一般来说,它似乎可以编译,但当然这只是一个关于它是否被允许的温和指示。

标签: c++c++11

解决方案


在[temp.explicit]中没有明确禁止它的内容。此外,还有一个显式声明([temp.explicit#5]):

函数模板、变量模板、类模板的成员函数或静态数据成员、或类或类模板的成员函数模板的声明应在该实体的显式实例化之前。

如果需要定义,则本段将有所不同(即,它将需要定义),因此您的代码似乎合法。


推荐阅读