[英]General min and max - C++
寫一般的最小函數,我想到了兩個問題。 代碼適用於任何輸入類型和不同的參數號:
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)
類型decltype(std::THE_RESULT<a,b>::type)
是const &
還是不?
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
來找出答案)。
實際上, 這是一個類型支持實用程序列表。 把自己打昏。
在答案和值得評論后,我做了如下:
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...);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.