Не понятно, что именно вы здесь спрашиваете. Код, который вы представили, уже поддерживает назначение. Просто сделайте это и по желанию сработает (или, по крайней мере, он должен скомпилироваться). Не имеет значения, на какой стороне оператора присваивания используется ваша перегруженная []
. В левой части (LHS) он будет работать точно так же, как и в правой части (RHS) назначения (или как операнд <<
, как в исходном сообщении). Ваш []
возвращает ссылку на Object
, а затем фактическое назначение обрабатывается оператором присваивания вашего типа Object
, что означает, что сам []
на самом деле не участвует в фактическом назначении.
Реальный вопрос здесь в том, как вы хотите, чтобы ваш []
действовал в определенных особых случаях. Что произойдет, если ваш ключ отсутствует в таблице? Ссылка на то, что Object
ваш lookup
собирается вернуть в этом случае?
Невозможно понять из того, что вы опубликовали. Я вижу, что он возвращает ссылку, поэтому возвращение NULL
не может быть и речи. Вставляет ли новый пустой Object
для данного ключа? Если так, то вам не нужно ничего делать. Ваш []
уже полностью готов к использованию на LHS задания. (Так работает []
в std::map
, кстати)
В случае, если ваш lookup
возвращает ссылку на специальный «охранник» Object
, вы должны предпринять специальные шаги. Вы, вероятно, не хотите присваивать что-либо «охранному» объекту, поэтому вы должны как-то «отключить» его оператор присваивания, и все готово. Остальное должно работать как есть.
Если ваш lookup
выдает исключение в случае несуществующего ключа, тогда вы должны решить, является ли это тем, что вы хотите, когда []
используется на LHS назначения. Если так, то вам не нужно ничего делать. Если нет, тогда потребуется дополнительная работа ...
Итак, опять же, что произойдет, если вы передадите несуществующий ключ lookup
?
P.S. Кроме того, обычно имеет смысл объявить []
(и lookup
) с параметром const HashedObj&
или параметром HashedObj
. Неконстантная ссылка, как в вашем примере, выглядит странно и может привести к проблемам в некоторых (на самом деле, в большинстве) случаях. Я удивлен, что теперь это работает для тебя ...