Wpis z mikrobloga

Cześć. Piszę w c++ program w którym chce mieć uniwersalny interface liczący, niezależnie od danych jakie podepnę. Zrobiłem to jako klasę abstrakcyjną a dane na których chce operować dziedziczą z tej klasy. Mam problem z metodą w której chce operować na 2 obiektach - obiekcie wywołującym tą metodę i obiekcie danym w argumencie. Żeby to było uniwersalne muszę operować na obiektach klasy abstrakcyjnej. Jak mogę to zrzutować na klasę dziedziczącą?

Ten kod to tylko przykład pokazujący problem którego nie mogę rozwiązać

https://pastebin.com/dHBD9g4W

#cpp #programowanie #cplusplus
  • 10
@Caly_na_bialo: 1) pokaż co chcesz uzyskać, bo po opisie i rozwiązaniu nie mam przekonania, że wiem o co Tobie chodzi, a tak ciężko doradzić cokolwiek. Np jak chcesz wywoływać metodę, kiedy i co chcesz dzięki temu uzyskać.
@Caly_na_bialo: U ciebie wystarczy:

if( Derived* derived= dynamic_cast( base.get() ) {
Jak byś chciał dalej przekazać taki obiekt jako std::shared_ptr to:

if( std::shared_ptr derived= dynamic_pointer_cast( base ) {
Po za tym jak przekazujesz std::shared_ptr niżej to zawsze przynajmniej dawaj const&. Ale jeżeli metoda nie ma prawa przejąć własności nad obiektem to możesz dawać suchy pointer. Jeżeli jednak przejmuje std::shared_ptr a możesz zrobić szablon to zawsze dawaj Uniwersalną Referencje ( auto&&
@KrzaQ2: Oh zapominam, po za tym I tak by nie zrozumiał jak to inaczej zrobić.

Po za tym jak będzie miał operacje na dwóch polimorficznych obiektach to ciężko będzie mu dobrać odpowiednią metodę, w sumie to nie znam tutaj optymalnego rozwiązania.
@KrzaQ2: Jak na razie to nie widzę u niego żadnego designu więc się nie czepiaj.
Odpowiedziałem tylko na jego pytanie i dałem mu tylko propozycję spojrzenia na wzorce, dzięki którym może odwrócić zależność od typu parametru.