interfejs, szablon

0

Cześć ;)
Załóżmy, że tworzę sobie klasę sparametryzowaną i mam takie wymaganie, typ sparametryzowany musi mieć zdefiniowane jakieś operatory.
Widzę to tak:
Tworzę sobie interfejs i w nim robię pure virtual te parametry. Teraz jakoś trzeba zasygnalizować, że typ parametryzowanu musi dziedziczyć po tym intefejsie ( musi go implementować).
Jak to zrobić?

0

To, czego potrzebujesz, to koncepty. Tutaj np. wykład o tym ze spotkań wrocławskiej grupy C++: http://cppwroclaw.pl/dokuwiki/spotkania/004/info

0

Co: - "... typ sparametryzowany musi mieć zdefiniowane jakieś operatory." - ma wspólnego z interface'ami ?

0

to powiedz mi, jak inaczej zapewnisz, żeby typ zapewniał, że będą zdefiniowane operatory, np. porównania?

0

Jest dużo na to sposobów, np:

struct Cmp
  {
   protected:
   virtual int cmp(const Cmp &c)const=0;
   friend bool operator==(const Cmp &a,const Cmp &b) { return (cmp(a,b)==0); }
   friend bool operator<=(const Cmp &a,const Cmp &b) { return (cmp(a,b)<=0); }
   friend bool operator>=(const Cmp &a,const Cmp &b) { return (cmp(a,b)>=0); }
   friend bool operator!=(const Cmp &a,const Cmp &b) { return (cmp(a,b)!=0); }
   friend bool operator<(const Cmp &a,const Cmp &b) { return (cmp(a,b)<0); }
   friend bool operator>(const Cmp &a,const Cmp &b) { return (cmp(a,b)>0); }
  };

Wszystko co pochodzi od Cmp ma już wszystkie operatory porównania, jedynie trzeba nadpisać metodę cmp.
Jeżeli metoda nie nadpisana - to klasa jest abstrakcyjna więc nie może istnieć.

0

toż przecież zrobiłeś to samo, tylko zebrałeś w jedną metodę. Nic nadzwyczajnego.
Ale wracając, jak teraz zapewnić, żeby parametr pochodził właśne od Cmp?

0

Nic nie trzeba robić, kompilator ci to zapewni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1