struct A
{
template <class U>
void f(U)
{
}
};
template <class T>
void f(T t)
{
A a;
a.template f<int>(t);
a.template f<>(t);
a.f<int>(t);
a.f<>(t);
a.f(t);
}
至少在 MSVC2010 下上面的代码可以正常编译。
在调用A.f
的所有方式中,有什么优惠的方式吗?
有什么区别吗?
最佳答案
嗯,a
类型为 A
,在此上下文中不是依赖类型。所以 template
关键字不是必需的,它仅用于混淆代码——不要使用它。
调用模板而不提供任何参数的版本同样不会改变行为,只会降低代码的可读性——也不要使用它。
在剩下的两个候选人之间,a.f(t)
和 a.f<int>(t)
, 在大多数情况下使用第一个,如果编译器无法推断类型则使用第二个。
关于c++ - 调用模板函数的常规方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141727/