C++ 無 interface/delegate 關鍵字,但可用純虛函數 + 多重繼承模擬協議委托。
beAwaken()。Awakable* delegate,定時後調用 delegate->beAwaken()。Awakable,實現 beAwaken(),設置鬧鐘時將 this 作為 delegate 傳入。#include <iostream>
#include <unistd.h>
using namespace std;
class Awakable { public: virtual void beAwaken() = 0; };
class AlarmClock {
public:
Awakable* delegate;
void alarmAfter(int seconds) const {
sleep(seconds);
cout << "叮咚 叮咚 叮咚" << endl;
delegate->beAwaken();
}
};
class Person : public Awakable {
public:
void rollClock(int seconds) {
cout << "人設置了鬧鐘 " << seconds << " 秒後響鈴" << endl;
AlarmClock ac;
ac.delegate = this;
ac.alarmAfter(seconds);
}
void beAwaken() override { cout << "人被鬧鐘喚醒了" << endl; }
};
int main() {
Person* person = new Person;
person->rollClock(5);
delete person;
return 0;
}
Java 用 interface,C# 用 delegate,Objective-C/Swift 用 protocol,函數式語言用 lambda/函數對象。C++ 亦可用 std::function/仿函數實現類似回調。