Rozważam this question dla metod klasy const i non const. Preferowaną odpowiedzią jest efektywny C++ autorstwa Scotta Meyersa, gdzie metoda niestanowiąca stałych jest zaimplementowana w kategoriach metody const.Usuwanie powielania kodu z metod const i non const, które zwracają iteratory
Poszerzenie tego dalej, w jaki sposób można zmniejszyć duplikację kodu, jeśli metody zwracają iteratory zamiast odwołań? Modyfikowanie przykład w połączonej pytanie:
class X
{
std::vector<Z> vecZ;
public:
std::vector<Z>::iterator Z(size_t index)
{
// ...
}
std::vector<Z>::const_iterator Z(size_t index) const
{
// ...
}
};
nie mogę wdrożyć metody non-const pod względem sposobu const, ponieważ nie jest możliwe do konwersji bezpośrednio z const_iterator do iteratora bez korzystania z dystansu()/advance() technika.
W tym przykładzie, ponieważ używamy wektora std :: vector jako kontenera, może być możliwe rzutowanie z const_iterator na iterator, ponieważ mogą one zostać zaimplementowane jako wskaźniki. Nie chcę na tym polegać. Czy istnieje bardziej ogólne rozwiązanie?
Ta funkcja jest albo trywialna, albo powinna być zaimplementowana jako szablon funkcji algorytmu, który sprawia, że funkcja członka znowu staje się trywialna. – ipc
W tym przypadku obie funkcje mogą być 'return vecZ.begin() + index'. Lub, jeśli absolutnie musisz je zmienić, wersja const może być 'return vecZ.cbegin() + index'. Patrz, nie ma duplikacji! –