您能否解释一下,为什么显式模板实例化在这里不起作用?
template <typename T>
bool IsEqual(T v1, T v2) {
return v1 == v2;
}
template bool IsEqual<double>(double a, double b);
int main() {
int c = 4;
double d = 4.0;
IsEqual(c,d)
return 0;
}
代码产生的错误是:
note: template argument deduction/substitution failed:
note: deduced conflicting types for parameter 'T' ('int' and 'double')
如果该函数不是模板函数,则一切正常。因此,我希望使用显式实例化来创建相同的函数。
bool IsEqualT (double a, double b) {
return a == b;
}
最佳答案
显式模板实例化可确保编译器为一组特定的模板参数生成代码,这意味着如果链接器需要它,则将找到该代码。
它不会隐藏模板参数的其他组合,也不会阻止实例化它们(隐式或其他方式)。
这样,显式实例化对模板参数的推导不起作用,对过载解析也不起作用。可能实例化的整个家族仍然是候选对象。
关于c++ - 为什么显式模板实例化不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45887578/