9

一般的な最小関数を書いて、2 つの質問が頭に浮かびました。コードは、任意の入力タイプと異なる引数番号で正常に動作します。

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)isconst &か not ?

4

2 に答える 2

5

答えと価値のあるコメントの後、私は以下のようにしました:

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...);
}
于 2013-05-11T14:49:24.057 に答える