• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Polimorfizm z czysto wirtualnego szablonu

Object Storage Arubacloud
0 głosów
550 wizyt
pytanie zadane 1 grudnia 2017 w C i C++ przez Hunter94 Mądrala (6,290 p.)

Witam smiley, mam za zadanie wdrążyć w swoim projekcie dziedziczenie z szablonu klasy w którym wszystkie metody są czysto wirtualne. I nie ma z tym żadnego problemu,

pytanie jest po co? co zyskuje w tym momencie?

Wciąż nie mogę przestawiać polimorficznego wskaźnika ponieważ specyfikuje w jego deklaracji typ szablonu.

Szablonu nie mogę utworzyć bo jest czysto wirtualny.  wyczytałem w necie że ponoć to jest observer pattern, ale niezbyt rozumiem jak go wykorzystać w tych szablonach. 

Zamieszczam przykładowy kod problemu.

#include <iostream>
using namespace std;

void print(string msg){
    cout << msg << "\n";
}

template <class k> class A{
public:
    virtual void foo(k klasa)=0;
};

class B :public A <B>{
public:
    void spam(){print("spam mhhh... spam");}

     void foo(B klasa) override{
        klasa.spam();
    }
};

class C :public A <C>{
public:
    void foobar(){print("Foo... \n ...Bar \n");}

    void foo(C klasa) override{
        klasa.foobar();
    }

};

int main() {
    std::cout << "Hello, World!" << std::endl;
    B b;
    b.foo(b);
    C c;
    c.foo(c);
    A<B>* a;
    a = &b;
    a->foo(b);

    //tego nie da sie zrobic
//    a = &c;
//    a->foo(c);


    return 0;
}

Z góry dziękuje za pomysły i sugestie. 

1 odpowiedź

+1 głos
odpowiedź 1 grudnia 2017 przez Ehlert Ekspert (212,670 p.)

To co próbujesz zaimplementować to CRTP, czyli Curiously recurring template pattern​​​​​​. Przydatne gdy chcesz zaprojektować uniwersalną klasę dla singletonów, lub counter obiektów. Używałem tego również dla animacji w sfmlu, kiedy jeden obiekt miał własnego spritea i jego state, ale wspólną teksturę i mapę animacji. 

komentarz 1 grudnia 2017 przez Hunter94 Mądrala (6,290 p.)

Bardzo dziękuje! Zdecydowanie może chodzić o singletony.
Mam 3 obiekty i każdy z nich to inne repozytorium. 
Pytanie czy jeśli w klasie bazowej nie przechowuje żadnych wartości a jedynie czysto wirtualne metody, które i tak potem muszę implementować i klasa bazowa nie może służyć jako interfejs do nich to co mogę z tym zrobić? dodam że repozytoria komunikują się między sobą. 

treść polecenia. 

Zauważ, że repozytoria wykonują te same operacje, tylko na innych danych. Utwórz klasę abstrakcyjną o nazwie Repository, będącą klasą bazową dla wszystkich repozytoriów. Wszystkie metody tej klasy powinny być czysto wirtualne. Klasa ta powinna być klasą szablonową, tak aby można było na jej podstawie tworzyć repozytoria działające na różnych typach danych.

komentarz 1 grudnia 2017 przez Ehlert Ekspert (212,670 p.)
Jest to całkiem logiczne. Treść tego zadania to klasyczny wzorzec Repository.

Podobne pytania

0 głosów
2 odpowiedzi 1,019 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez dawid2002 Mądrala (5,190 p.)
0 głosów
1 odpowiedź 716 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez Sidzej Użytkownik (850 p.)
0 głosów
0 odpowiedzi 169 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...