加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Variadic模板最大功能故障

发布时间:2020-12-16 10:30:41 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个可变参数模板,用于查找任意数量的数字的最大值(这仅用于练习可变参数模板). 但是,我有点碰壁,无法理解为什么我当前的尝试根本不起作用,并在编译时因错误而失败: prog.cpp: In function 'A myMax(A,A,Args ...) [with A = int,Args = {}]'
我正在尝试编写一个可变参数模板,用于查找任意数量的数字的最大值(这仅用于练习可变参数模板).

但是,我有点碰壁,无法理解为什么我当前的尝试根本不起作用,并在编译时因错误而失败:

prog.cpp: In function 'A myMax(A,A,Args ...) [with A = int,Args = {}]':
prog.cpp:7:35:   instantiated from 'A myMax(A,Args = {int}]'
prog.cpp:22:26:   instantiated from here
prog.cpp:7:35: error: no matching function for call to 'myMax(int)'

我的代码如下:

#include <iostream>

template <typename A,typename ... Args>
A myMax(A a,A b,Args ... args)
{
   return myMax(myMax(a,b),args...);
}

template <typename A>
A myMax(A a,A b)
{
   if (a>b)
      return a;
   else
      return b;
}


int main()
{
   std::cout<<myMax(1,5,2);
}

谁能告诉我如何修复我的可变参数模板?

解决方法

只需定义一个重载,它在可变参数函数模板上面有两个参数:

template <typename A> 
A myMax(A a,A b)      //this is an overload,not specialization
{
   if (a>b)
      return a;
   else
      return b;
}

template <typename A,args...);
}

现在它将工作:http://www.ideone.com/R9m61

重载应该在实例化时可见,这在可变参数函数模板中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读