Вопрос на С++: функция похожа на протоколы Obj-C?

Я использую протоколы Objective-C в моем коде; они невероятны для многих вещей. Однако в С++ я не уверен, как выполнить одно и то же. Вот пример:

  • Вид таблицы, в котором есть функция setDelegate (делегат протокола *)
  • Делегирование класса Class, но реализация протокола "Протокол"
  • Делегат класса Class2, также реализующий "Протокол"
  • setDelegate (objOfClass) и setDelegate (objOfClass2) являются действительными

В Obj-C это достаточно просто, но я не могу понять, как это сделать на С++. Возможно ли это?

Ответ 1

В принципе, вместо "Протокола" считают "базовый класс с чистыми виртуальными функциями", иногда называемый интерфейсом на других языках.

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) { }
};