簡體   English   中英

一般最小和最大 - C ++

[英]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_typec++11 ):

對於非專用的std::common_type ,確定每對T1T2之間的公共類型的規則正是確定三元條件運算符的返回類型的規則,其中T1T2是其第二和第三個操作數的類型。

對於算術類型,公共類型也可以被視為(可能是混合模式)算術表達式的類型,例如T0() + T1() + ... + Tn().

不確定const& ,但你可以使用std::remove_cvstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM