首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一般min和max - C++

一般min和max - C++
EN

Stack Overflow用户
提问于 2013-05-11 14:12:45
回答 2查看 1.6K关注 0票数 9

写了一个一般的最小函数,两个问题出现在我的脑海里。代码可以很好地处理任何输入类型和不同的参数号:

代码语言:javascript
复制
namespace xyz
{

template <typename T1, typename T2>
auto min(const T1 &a, const T2 &b) -> decltype(a+b)
{
    return a < b ? a : b;
}

template <typename T1, typename T2, typename ... Args>
auto min(const T1 &a, const T2 &b, Args ... args) -> decltype(a+b)
{
    return min(min(a, b), args...);
}

}

int main()
{
    cout << xyz::min(4, 5.8f, 3, 1.8, 3, 1.1, 9) << endl;
    //                   ^        ^           ^
    //                   |        |           |
    //                 float    double       int
}
  • 有更好的替代decltype(a+b)吗?我想有一个标准的类,我不记得了,比如decltype(std::THE_RESULT<a,b>::type)
  • decltype(std::THE_RESULT<a,b>::type)的返回类型是否为const &
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-11 14:17:16

std::common_type(c++11):

对于非专门化的std::common_type,确定每对T1T2之间的公共类型的规则正是确定三元条件运算符返回类型的规则,其中T1T2是其第二个和第三个操作数的类型。

对于算术类型,公共类型也可以视为(可能是混合模式)算术表达式(如T0() + T1() + ... + Tn(). )的类型。

不确定const&,但您可以使用std::remove_cvstd::remove_reference (以及std::is_reference来找出答案)。

实际上,下面是是一个类型支持实用程序的列表。请自便。

票数 13
EN

Stack Overflow用户

发布于 2013-05-11 14:49:24

在回答和值得评论之后,我这样做了:

代码语言:javascript
复制
template <typename T1, typename T2>
auto min(const T1 &a, const T2 &b) 
-> typename std::common_type<const T1&, const T2&>::type
{
    return a < b ? a : b;
}

template <typename T1, typename T2, typename ... Args>
auto min(const T1 &a, const T2 &b, const Args& ... args)
-> typename std::common_type<const T1&, const T2&, const Args& ...>::type
{
    return min(min(a, b), args...);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16497977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档