Включение возвращаемого типа контейнера в сигнатуру метода в значительной степени помешает вам когда-либо изменить базовый тип контейнера, если альтернативный контейнер станет более подходящим в будущем.
Вы должны хотя бы рассмотреть возможность использования typedef
, чтобы скрыть фактический тип контейнера, и документировать минимальные возможности возвращаемого объекта, а не возвращать vector
напрямую.
Но вы можете вместо этого предоставить интерфейс итератора, например, YourThing::const_iterator getFooBegin()
и getFooEnd()
. Таким образом, клиентский код не может изменять базовые объекты контейнера OR, и на самом деле ему даже не нужно знать тип контейнера, что обеспечивает большую гибкость в будущем.
Если вы предпочитаете возвращать контейнер, вам нужно точно решить, что такое семантика, исходя из вопроса, который звучит так, будто вы хотите, чтобы он был только для чтения. В этом случае вам, скорее всего, придется сделать копию контейнера в другой vector
, который будет содержать константные указатели вместо неконстантных, поэтому клиент не сможет их изменить. Альтернативно, другой ответ дал действительно хорошее предложение использовать контейнеры с указателями наддува.