Wygląda jakbym miał fundamentalne nieporozumienie o C++: <C++ alternatywy do void * wskaźniki (nie jest to szablony)
Lubię polimorficzny rozwiązanie kontenera. Dziękuję WIĘC, za zwrócenie na to uwagi :)
Mamy więc potrzebę stworzenia stosunkowo ogólnego obiektu typu kontenera. Zdarza się również, że zawiera pewną logikę biznesową. Jednak w tym kontenerze musimy przechowywać zasadniczo dowolne dane - od prymitywnych typów danych po skomplikowane klasy.
W ten sposób można od razu przejść do idei klasy szablonów i zrobić z nią. Zauważyłem jednak, że polimorfizm C++ i szablony nie grają ze sobą dobrze. Ponieważ mamy do czynienia z pewną złożoną logiką, którą będziemy musieli popracować, wolałbym raczej trzymać się albo szablonów, albo polimorfizmu, a nie próbować walczyć z C++, czyniąc je obydwoma.
Wreszcie, biorąc pod uwagę, że chcę zrobić jedno lub drugie, wolałbym polimorfizm. O wiele łatwiej jest reprezentować ograniczenia takie jak "ten kontener zawiera typy porównywalne" - a la java.
Przeniesienie mnie do tematu pytania: Najprościej mówiąc, wyobrażam sobie, że mogę mieć "wirtualny" interfejs "kontenera", który ma coś zbliżonego do "wypychania danych" i popu (void * data) " (dla zapisu, właściwie nie próbuję implementować stosu).
Nie lubię jednak pustki * na najwyższym poziomie, nie wspominając o tym, że podpis będzie się zmieniał za każdym razem, gdy chcę dodać ograniczenie do typu danych, z którymi może pracować konkretny kontener.
Podsumowanie: Mamy stosunkowo złożone pojemniki, które mają różne sposoby odzyskiwania elementów. Chcemy być w stanie zmienić ograniczenia elementów, które mogą wejść do kontenerów. Elementy powinny działać z wieloma rodzajami kontenerów (o ile spełniają ograniczenia danego kontenera).
Edytuj: Powinienem także wspomnieć, że same pojemniki muszą być polimorficzne. To jest mój główny powód, dla którego nie chcę używać szablonowego C++.
Więc - czy powinienem rzucić miłość do interfejsów typu Java i korzystać z szablonów? Czy powinienem używać void * i statycznie rzucać wszystko? Czy powinienem iść z pustą definicją klasy "Element", która nic nie deklaruje i używać jej jako mojej najwyższej klasy w hierarchii "Element"?
Jednym z powodów, dla których uwielbiam przepełnienie stosu jest to, że wiele odpowiedzi dostarcza interesujących informacji na temat innych podejść, których nawet nie brałem pod uwagę. Dlatego z góry dziękuję za uwagi i komentarze.
co masz na myśli "polimorfizm i szablony nie współgrają ze sobą"? –
W szczególności, polimorficzny pojemnik - zapomniałem wspomnieć o tym wymogu. O ile wiem, nie da się tego zrobić ... ale co wiem. – Voltaire
> Potrzebuję, aby same pojemniki były polimorficzne. Poprawiłem odpowiedź odpowiednio. – Lev