我需要對我的C++ 11可變參數版本std::min
,std::max
的實現進行反思。這裏是我的兩個選擇爲std::min
,其中std::max
由只是std::max
更換std::min
類似實施:對C++的反思std :: min()和std :: max()的變體模板版本
/*! Multi-Type Minimum of \p a. */
template <LessThanComparable T> const T & multi_type_min (const T & a) { return a; } // template termination
/*! Multi-Type Minimum of \p a and \p args. */
template <class T, class ... R >
//requires SameType <T , Args >...
T multi_type_min(const T & a, const R &... b)
{
return std::min(a, multi_type_min(b...));
}
/*! Minimum of \p a. */
template <LessThanComparable T> const T & common_type_min(const T & a) { return a; } // template termination
/*! Minimum of \p a and \p args. */
template <class T, class ... R, class C = typename boost::common_type<T, R...>::type >
C common_type_min(const T & a, const R &... b)
{
return std::min(static_cast<C>(a), static_cast<C>(common_type_min(b...)));
}
的關鍵問題是,如果我們需要common_type_min
呢?請注意,這允許min()被一個參數調用。這會導致混亂或問題嗎?
你不能遞歸,直到你得到2個參數?沒有要求特別停止1參數。 –
我知道如何做到這一點。我只是想知道,爲了算法的一般性,容器包裝器例如'std :: tuple'允許'min'和'max'採用一個參數是否更好。 –
我傾向於說單個值的最小值沒有意義,但是1元元組的最小值確實有意義。也許最好爲容器類型重載'min()'。 –