你只是想讓它成爲兩者中的最大值?或者你希望它不超過兩者中的最大值?如果你希望它永遠是最大我想創建一個實用程序結構如下圖所示,並設置N作爲
template<int L,int M>
struct MaxInteger
{
public:
static const int value = L > M ? L : M;
};
然後實現它是這樣。
template<int L, int M>
MyInteger<MaxInteger<L,M>::value> MyInteger<L>::operator+(const MyInteger<M>& x) const;
編輯:按照要求執行constexpr。
constexpr int constMax(constexpr int a,constexpr int b) {return a > b ? a : b;}
然後實現這樣
template<int L, int M>
MyInteger<constMax(L,M)> MyInteger<L>::operator+(const MyInteger<M>& x) const;
,或者你可以做到這一點沒有結構
template<int L, int M>
MyInteger<L > M ? L : M> MyInteger<L>::operator+(const MyInteger<M>& x) const;
現在是兩者中的最大值,在另一種情況下它會發生什麼變化?無論如何,這是元編程的一般方式嗎?用這些特性聲明輔助結構? – user8469759
它曾經是唯一的方法。現在你有了C++ 11的constexpr選項,有時候type_traits頭文件會有你所需要的。 – user2927848
你能告訴我這些功能的使用嗎?只是作爲未來的參考,我還有什麼可以研究的。 – user8469759