2017-03-25 53 views

回答

3

嘗試

template <int first, int second, int ... rest> 
class maximum : 
    public maximum<std::max(first, second), rest...> {}; 

template <int first, int second> 
class maximum<first, second> : 
    public integral_constant<int, std::max(first, second)> {}; 

在線here

更新

第一類是接受三個或更多的通用類intege RS。然後它將找到兩個第一個輸入的最大值,然後遞歸地繼承第一個模板參數在所述最大值處的位置。直到只剩下兩個模板參數。

第二個類只接受兩個模板參數。然後它找到最大的那些。它繼承自定義成員valuestd::integral_constant

對於第二課,我們需要編寫class maximum<first, second>,因爲它是第一類的專用版本,即它只需要兩個輸入。

+0

一些解釋,或者你可以給一些鏈接,以便在閱讀後,我可以理解這一點。在某個地方,它就像「最大:」,並在某些地方像「最大<第一,第二>:」什麼是integral_constant在那裏做?從哪裏和如何::值得到執行?\ – user3247895

3

用C++ 14你可以用std::max

std::max({5,4,3,23,2,3,34,343,3434,343,6,56,45,456,2}); // == 3434 

裹成一個結構:

template <int... ints> 
struct maximum { 
    static constexpr int value = std::max({ints...}); 
}; 

On Coliru

+0

這是一個整潔。 – HolyBlackCat

+0

元編程只是不是它曾經是:-) – Jonas

相關問題