我應該如何編寫一個模板類來查找最多幾個數字?如何使用tempate找到多個數字的最大值?
它應該像這樣:
Maximum<5,4,3>::value == 5
Maximum<12,4,3>::value == 12
Maximum<5,4,3,23,2,3,34,343,3434,343,6,56,45,456,2>::value == 3434
我應該如何編寫一個模板類來查找最多幾個數字?如何使用tempate找到多個數字的最大值?
它應該像這樣:
Maximum<5,4,3>::value == 5
Maximum<12,4,3>::value == 12
Maximum<5,4,3,23,2,3,34,343,3434,343,6,56,45,456,2>::value == 3434
嘗試
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。然後它將找到兩個第一個輸入的最大值,然後遞歸地繼承第一個模板參數在所述最大值處的位置。直到只剩下兩個模板參數。
第二個類只接受兩個模板參數。然後它找到最大的那些。它繼承自定義成員value
的std::integral_constant。
對於第二課,我們需要編寫class maximum<first, second>
,因爲它是第一類的專用版本,即它只需要兩個輸入。
一些解釋,或者你可以給一些鏈接,以便在閱讀後,我可以理解這一點。在某個地方,它就像「最大:」,並在某些地方像「最大<第一,第二>:」什麼是integral_constant在那裏做?從哪裏和如何::值得到執行?\ – user3247895
用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...});
};
這是一個整潔。 – HolyBlackCat
元編程只是不是它曾經是:-) – Jonas
不可能的。沒有'==='這樣的語法。 – aschepler
對不起,錯誤的習慣,由於太多的js編碼 – user3247895
對不起:(謝謝:) – user3247895