2016-02-18 6 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] будет законным путем разыменования сначала, а затем индексации.

Смежные вопросы