我见过这样的代码:
#include <iostream>
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {
std::cout << "in mf t is: " << *t << std::endl;
}
};
int main()
{
int i = 5;
X* x = new X();
x->mf(&i); //why can this be called without specifying a type as in: x->mf<int>(&i) ??
}
我的问题在主要的评论中。为什么可以调用:
x->mf(&i);
...没有指定类型?直觉说它应该被称为:
x->mf<int>(&i);
...但显然不必像这样调用(无论哪种方式,上面都使用 gcc 4.7 编译 - 没有明确指定模板。)
而且,如果您在没有指定模板类型的情况下调用它,那么 T 的类型将是什么(在模板函数定义中)?(我猜它默认为你传递给函数 mf 作为参数的任何类型,但进一步解释它是如何工作的会很好)