写了一个一般的最小函数,两个问题出现在我的脑海里。代码可以很好地处理任何输入类型和不同的参数号:
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 &?发布于 2013-05-11 14:17:16
std::common_type(c++11):
对于非专门化的
std::common_type,确定每对T1、T2之间的公共类型的规则正是确定三元条件运算符返回类型的规则,其中T1和T2是其第二个和第三个操作数的类型。
和
对于算术类型,公共类型也可以视为(可能是混合模式)算术表达式(如
T0() + T1() + ... + Tn().)的类型。
不确定const&,但您可以使用std::remove_cv和std::remove_reference (以及std::is_reference来找出答案)。
实际上,下面是是一个类型支持实用程序的列表。请自便。
发布于 2013-05-11 14:49:24
在回答和值得评论之后,我这样做了:
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...);
}https://stackoverflow.com/questions/16497977
复制相似问题