C++11 默认函数模板参数的用途是什么

C++11 默认函数模板参数的用途是什么,c++11,function-templates,C++11,Function Templates,与必须由模板用户指定的类模板参数不同,函数模板参数由编译器推导。因此,一个自然的问题出现了:为什么要指定默认函数模板参数 我能想到的一个用法是,当我们想要强制一些函数模板参数而不需要指定所有参数时。然而,这似乎是一个极端的情况。还有其他情况吗?这可能是部分答案。我想到的一个用途是,当我们有一个模板参数,它在函数的参数列表中不作为类型出现,因此无法推断。为模板参数提供默认参数可能非常合理。n.m.的上述评论为这种用法提供了一个很好的例子 示例: template <typename Y,

与必须由模板用户指定的类模板参数不同,函数模板参数由编译器推导。因此,一个自然的问题出现了:为什么要指定默认函数模板参数


我能想到的一个用法是,当我们想要强制一些函数模板参数而不需要指定所有参数时。然而,这似乎是一个极端的情况。还有其他情况吗?

这可能是部分答案。我想到的一个用途是,当我们有一个模板参数,它在函数的参数列表中不作为类型出现,因此无法推断。为模板参数提供默认参数可能非常合理。n.m.的上述评论为这种用法提供了一个很好的例子

示例:

 template <typename Y, typename Y, int Z>
 class Do{};
模板
类Do{};
十、 Y,Z是模板参数

用户可以这样使用:

 Do<int,int,1> doit;
doit;
使用类模板时,模板参数无法从函数参数中推导出来

你称之为“默认”参数

 template <typename Y, typename Y, int Z=9>
 class Do{};
模板
类Do{};
如果使用代码未给出任何信息,则Z默认为9,如:

Do<int,int> doit;
doit;
如果您的模板参数可以从函数参数推导出来,用户可能希望使用特殊的模板实例,如:

template <typename T>
void func( const T&);

    template<>
void func( const int& )
{   
    std::cout << "int in use" << std::endl;
}   

template<>
void func( const double&)
{   
    std::cout << "double in use" << std::endl;
}   

int main()
{   
    func(3.4); // calls double
    func<int>(3.4); //calls int
} 
模板
无效函数(常数T&);
样板
void func(常量int&)
{   

std::cout尝试将下面的
func
转换为
构造函数(它们没有返回类型)

模板
typename std::enable_if::type func(tp_arg){
样板
typename std::enable_if<!std::is_basical::value>::type func(T const&p_arg){}

使用默认函数模板参数非常简单。

“函数模板参数由编译器推导”……我在写回复的时候:这个问题是关于函数模板的。非常感谢!手动给定参数的例子和函数模板完全一样!在这里使用类或函数模板是一样的……没关系!有意思的是:-对我来说,你想完成的事情不是很清楚。h、 你能帮我把最后一句话写上代码吗?
  template<class T>
  typename std::enable_if< std::is_fundamental<T>::value >::type func(T p_arg){}

  template<class T>
  typename std::enable_if< !std::is_fundamental<T>::value >::type func(T const &p_arg){}