2016-02-18 13 views
1

所以我有這個功能如何使用重載[]在同一個文件中C++

template<class KEY,class T, bool (*tlt)(const KEY& a, const KEY& b)> 
T BSTMap<KEY,T,tlt>::put(const KEY& key, const T& value) { 
     if (!has_key(key)) 
      throw KeyError("BSTMap::put"); 
     this[key] = value; 
     ++mod_count; 
     return this[key]; 
} 

這是應該用我的超載[],如在此代碼。

T& BSTMap<KEY,T,tlt>::operator [] (const KEY& key) { 
    if (has_key(key)) 
     return find_key(map, key)->value.second; 
    find_key(map, key)->value = Entry(key, T()); 
    used++, mod_count++; 
    return find_key(map, key)->value.second; 
} 

從本質上講,[]運營商在這種情況下,需要一個密鑰和創建,如果它不存在的條目,否則返回到該領域的現有價值的參考。我的問題是,如何在文件中使用超載的[]運算符來修改我的數據。我嘗試使用this[],但這不起作用。

+1

'運營商[](鍵) '? – crashmstr

回答

4

方法的正式名稱爲operator[],這樣你就可以直接使用:

return operator[](key); 

你也可以提領this做一個參考:

return (*this)[key]; 
+0

正是我需要的。我正在使用這個 - > [],但它看起來很時髦,並沒有工作。謝謝。 –

2

this是一個指針,大概(*this)[key]將通過先解引用,然後索引合法。

相關問題