Ok, to jest naprawdę trudne do przyznania się, ale w tej chwili mam silną pokusę, aby odziedziczyć std::vector
.
Potrzebuję około 10 niestandardowych algorytmów dla wektora i chcę, aby były one bezpośrednio elementami wektora. Ale oczywiście chcę też mieć resztę std::vector
interfejsu. Cóż, moim pierwszym pomysłem, jako obywatela przestrzegającego prawa, było mieć std::vector
członka w MyVector
klasie. Ale wtedy musiałbym ręcznie zresetować cały interfejs std :: vector. Za dużo do napisania. Następnie pomyślałem o dziedziczeniu prywatnym, aby zamiast metod usprawiedliwiania napisać kilka z nich using std::vector::member
w części publicznej. To też jest nużące.
I oto jestem, naprawdę uważam, że mogę po prostu odziedziczyć po społeczeństwie std::vector
, ale ostrzegam w dokumentacji, że tej klasy nie należy używać polimorficznie. Myślę, że większość programistów jest wystarczająco kompetentna, aby zrozumieć, że i tak nie należy z tego korzystać polimorficznie.
Czy moja decyzja jest całkowicie nieuzasadniona? Jeśli tak, to dlaczego? Czy możesz podać alternatywę, w której dodatkowi członkowie faktycznie byliby członkami, ale nie wymagałby ponownego wpisywania całego interfejsu wektora? Wątpię, ale jeśli możesz, po prostu będę szczęśliwy.
Poza tym, że jakiś idiota potrafi napisać coś podobnego
std::vector<int>* p = new MyVector
czy istnieje inne realistyczne zagrożenie w korzystaniu z MyVector? Mówiąc realistycznie, odrzucam takie rzeczy, jak wyobrażenie sobie funkcji, która przenosi wskaźnik do wektora ...
Cóż, przedstawiłem swoją sprawę. Zgrzeszyłem. Teraz to Ty musisz mi wybaczyć, czy nie :)
std::vector
jest dość ogromny, a kiedy pojawi się C ++ 1x, znacznie się rozszerzy. To dużo do napisania i więcej do rozszerzenia w ciągu kilku lat. Myślę, że jest to dobry powód, aby rozważyć dziedziczenie zamiast ograniczania - jeśli przyjmie się założenie, że te funkcje powinny być członkami (w co wątpię). Zasadą, aby nie czerpać z kontenerów STL jest to, że nie są one polimorficzne. Jeśli nie używasz ich w ten sposób, nie ma to zastosowania.