考虑一个简单的功能模板:
template <typename T>
void FunctionTemplate(T t){
}
void MyFunction(){
int a;
FunctionTemplate(a);
FunctionTemplate<int>(a);
}
在对(
FunctionTemplate(a)
)的第一次调用中,编译器计算出引发该问题的类型,是否存在导致调用FunctionTemplate(FunctionTemplate<int>(a)
)的第二种方式的原因,或者有任何无法使用第一种方法的令人信服的原因?编辑:我的术语稍微有些偏离,所以请根据需要进行编辑。
最佳答案
有时,即使您不必指定模板参数,也要指定它。假设您的函数接受类型为T
的参数,并且有一个int
,但您希望该函数将其作为float
。然后,您需要明确地说出FunctionTemplate<float>(my_int)
。
在很多情况下,无法推导出template参数。考虑以下:
template <typename T>
T FunctionTemplate() {
return T();
}
无论您如何称呼它,如果不提供template参数,就无法自动推断出
T
的类型。在这种情况下,最简单的原因是调用方站点没有说期望返回类型是什么。对于术语:当您不指定模板参数时,模板被隐式实例化;当您确实指定模板参数时,将显式实例化模板。
关于c++ - 有没有理由明确说明模板类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15314978/