考虑一个简单的功能模板:

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/

10-12 03:06