2010-06-28 11 views
10

Jestem przyzwyczajony do używania protokołów Objective-C w moim kodzie; są niewiarygodne dla wielu rzeczy. Jednak w C++ nie jestem pewien, jak osiągnąć to samo. Oto przykład:Pytanie C++: funkcja podobna do protokołów Obj-C?

  1. Widok tabeli, która posiada funkcję setDelegate (Protokół * delegata)
  2. delegat klasy do klasy, ale wykonania Protokołu „protokół”
  3. delegat klasy Klasa2 również wykonawczym „Protokół "
  4. setDelegate (objOfClass) i setDelegate (objOfClass2) są ważne

w Obj-C jest to dość proste, ale nie mogę dowiedzieć się, jak to zrobić w C++. Czy to możliwe?

Odpowiedz

16

Zasadniczo zamiast "Protokół" myślę "klasa podstawowa z czystymi funkcjami wirtualnymi", czasami nazywaną interfejsem w innych językach.

class Protocol 
{ 
public: 
    virtual void Foo() = 0; 
}; 

class Class : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class Class2 : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class TableView 
{ 
public: 
    void setDelegate(Protocol* proto) { } 
}; 
+0

Dzięki, z tym wyjątkiem, że mam z tym jeden problem. Różne klasy, tj. Klasa i klasa2, same są już podklasami. –

+1

@ jfm429, dlatego klasy mogą mieć wielu przodków. – avakar

+0

Ah, zapomniałem o tym. Widzę wiele problemów z tym związanych, szczególnie z niektórymi strukturami klas, z których korzystałem w przeszłości (wcześniej studiowałem dziedziczenie pojedynczego/wielokrotnego i są plusy i minusy, głównie minusy), ale w tej sytuacji wygrałem ". powodują żadnych problemów. –