即時嘗試編寫一個uint128_t庫和我的命中碰撞:我需要操作不同類型的整數,例如uint128_t^uint64_t
。我寫過運算符重載,如template <typename t> uint128_t operator^(T val)
。我也需要能夠做到uint128_t^uint128_t
。但是,因爲我的uint128_t使用2個uint64_t來存儲值,所以我不能簡單地使用uint128_t作爲T.因此,我寫了2個不同的函數,一個用T作爲參數類型,另一個用uint128_t作爲類型。使用模板時選擇正確的相等運算符
問題是,編譯器使用標準C++ int類型和uint128_t的T val
版本。我如何讓編譯器區分它們?
編輯:我有這樣的代碼在類中的鏈接:
template <typename T>
bool operator==(T val){
return (LOWER == (uint64_t) val);
}
bool operator==(uint128_t val){
return ((UPPER == val.upper()) && (LOWER == val.lower()));
}
,如果我做
uint128_t a(5), b(123, 45);
uint64_t c = 6;
(a == c);
(a == b);
兩條線將使用頂級運營商。然而,由於uint128_t是2部分,並且是一個對象,所以計算機將比較uint64_t與類,而不是值。我如何強制計算機使用第二個==運算符?
一些示例代碼將非常有用 – GWW 2011-05-25 04:24:37
您確定在這兩種情況下都會使用頂級版本嗎?比較兩個uint128_t時,C++的重載解析應該總是比模板版本更喜歡確切的非模板函數。 – templatetypedef 2011-05-25 04:35:32
這就是它似乎在做什麼。即時通訊仍在檢查... – calccrypto 2011-05-25 04:48:07