Какую сигнатуру функции следует использовать для возврата ссылки на объект, который может не существовать?

Я пишу простой контейнерный класс на C++, похожий на карту, в которой хранятся объекты, проиндексированные по ключу. Я хотел бы предоставить функцию доступа, например:

V& getValue(const K &key);

где я возвращаю ссылку на значение.

Но я также хотел обработать случай, когда ключ/значение отсутствует, и иметь возможность вернуть некоторый статус пользователю (. Могут быть некоторые причины, по которым его нет, и я хочу связаться с вызывающим абонентом через некоторые Тип состояния ).

Я полагаю, что мог бы сделать следующее, но для вызова этого потребовалось бы создать объект V, прежде чем эта функция может быть вызвана, и я просто собираюсь скопировать внутренний объект V в тот, который передается по ссылке, так что это кажется плохим.

Status getValue(const K &key, V& v);

Я мог бы также сделать:

V &getValue(const K &key, Status &s);

Но по какой-то причине это кажется немного неуклюжим, так как фокус отвлекается от статуса, и пользователи могут забыть проверить его (, но, возможно, это не моя проблема ).

Так есть ли в любом случае функция, похожая на

Status getValue(const K &key, V& v);

без необходимости создания фиктивного объекта V перед его вызовом? Вы не можете передать ссылку на ссылку. Я полагаю, что мог бы использовать указатели, и я рад это сделать, но это менее желательно для создания простой в использовании и осмысленной функции.

есть идеи?

5
задан Rob Kennedy 15 August 2012 в 14:27
поделиться