例如。函数头是:
template <class comparison_function, class iterator_type, class size_type>
bool F(comparison_function compare, iterator_type it)
Run Code Online (Sandbox Code Playgroud)
调用采用iterator_type和comparison_function参数,但不采用 size_type。因此,函数调用必须是显式的,例如:
F<?, std::vector<int>::iterator, long int>(std::less<int>(), it);
Run Code Online (Sandbox Code Playgroud)
会是什么??
什么会 ?是?
它应该是第一个传递的参数的类型,即std::less<int>
//vvvvvvvvvvvvvv----------------------------------------vvvvvvvvvvvvvv
F<std::less<int>, std::vector<int>::iterator, long int>(std::less<int>(), it);
Run Code Online (Sandbox Code Playgroud)
请注意,括号()表示std::less<int>()您正在传递类型为 的默认构造对象std::less<int>。
您可以通过使用模板参数推导来避免显式传递两个模板参数。这可以通过将 设为第一个模板参数来完成size_type,以便可以从传递的参数中推导出其余两个模板参数,如下所示:
//--------vvvvvvvvvvvvvvv--------------------------->now size_type is the first template parameter
template <class size_type, class comparison_function, class iterator_type>
void F(comparison_function compare, iterator_type it);
int main()
{
//----------vvvvvvvvvvvvvvvvvvvv---->this uses template argument deduction for the remaining two parameters
F<long>(std::less<int>(), it);
}
Run Code Online (Sandbox Code Playgroud)