在C++中,要支持多播Delegate,可以使用std::function和std::vector结合使用。以下是一个简单的示例:
#include <iostream>
#include <functional>
#include <vector>
// 定义一个Delegate类型
typedef std::function<void()> Delegate;
// 定义一个多播Delegate类
class MultiDelegate {
public:
// 添加Delegate到多播列表
void addDelegate(Delegate delegate) {
delegates.push_back(delegate);
}
// 触发所有Delegate
void invoke() {
for (auto& delegate : delegates) {
delegate();
}
}
private:
std::vector<Delegate> delegates;
};
// 测试例子
void func1() {
std::cout << "Function 1 called" << std::endl;
}
void func2() {
std::cout << "Function 2 called" << std::endl;
}
int main() {
MultiDelegate multiDelegate;
// 添加两个函数到多播Delegate
multiDelegate.addDelegate(func1);
multiDelegate.addDelegate(func2);
// 触发所有Delegate
multiDelegate.invoke();
return 0;
}
在这个例子中,我们首先定义了一个Delegate类型,然后定义了一个多播Delegate类MultiDelegate,其中使用了一个std::vector来存储所有的Delegate。我们可以通过addDelegate方法向MultiDelegate中添加多个Delegate,然后通过invoke方法触发所有Delegate。
在main函数中,我们创建了一个MultiDelegate对象multiDelegate,并添加了两个函数func1和func2到多播Delegate中。最后调用multiDelegate的invoke方法触发所有Delegate,输出结果为:
Function 1 called
Function 2 called