【发布时间】:2011-04-14 08:32:36
【问题描述】:
调用模板函数时,如果模板参数与参数没有歧义,则无需指定模板参数。例如。为:
template<typename T> T foo(T a) { /*...*/ }
您可以直接拨打foo(1) 就可以了,它不需要是foo<int>(1)。
这不适用于类/结构,即使从构造函数参数中可以清楚地看到。例如:
template<typename T> struct Foo { Foo(T a) { /*...*/ } };
现在我不能只写do_something_with(Foo(1)),它必须是do_something_with(Foo<int>(1))。
通常,为了解决这个问题,只有一些简单的包装函数,它们基本上只是包装了构造函数。即使在 STL 中也是如此:std::make_pair 就是这样一个例子。
现在的问题是:为什么会这样?这背后有什么合理的原因吗?
【问题讨论】: