Włączenie typu zwrotu kontenera do podpisu metody raczej uniemożliwi ciągłą zmianę podstawowego typu kontenera w przypadku, gdy alternatywny kontener stanie się bardziej odpowiedni w przyszłości.
Należy przynajmniej rozważyć użycie typedef
, aby ukryć rzeczywisty typ kontenera, i udokumentować minimalne możliwości zwracanego obiektu, a nie bezpośrednio zwracać wartość vector
.
Można jednak rozważyć udostępnienie interfejsu iteratora, takiego jak YourThing::const_iterator getFooBegin()
i getFooEnd()
. W ten sposób kod klienta nie może modyfikować podstawowych obiektów OR kontenera, a nawet nie musi nawet wiedzieć, jaki jest typ kontenera, co pozwala na większą elastyczność w przyszłości.
Jeśli wolisz zwrócić pojemnik, musisz dokładnie określić, czym jest semantyka, od pytania, które brzmi, jakby to było tylko do odczytu. W takim przypadku należałoby wykonać kopię kontenera w innym vector
, który zawierałby wskaźniki const, a nie stały, więc klient nie mógł ich zmodyfikować. Alternatywnie inna odpowiedź dostarczyła naprawdę dobrej sugestii użycia pojemników wskaźnika doładowania.
Możesz po prostu zwrócić const reference do wektora. W ten sposób dzwoniący nie może go zmodyfikować. – Juho
Wygląda na to, że z dyskusji i odpowiedzi wynika, że getVectorOfFoo() jest funkcją członkowską klasy i że wektor jest zmienną składową klasy, ale nie było to nigdzie w pytaniu, i robi różnicę . –
Dobra dyskusja, nauczyłem się czegoś od wszystkich. Dzięki chłopaki. – Mark