C++实现C#的事件委托功能

本文介绍如何使用C++实现类似C#的事件委托功能,通过定义函数指针类型,将静态函数和全局函数作为委托,存储在列表中,并在触发事件时调用这些函数。示例代码展示了如何添加和触发委托。

C++实现C#的事件委托功能

程序代码链接:https://download.csdn.net/download/hshqing/11652704

对于添加函数指针,则可以声明函数指针类型作为参数,定义全局函数,或者静态函数,可以作为委托,如:

//静态函数
class ClaseA
{
public:
	static int test(int a)
	{
		printf("ClaseA test %d.\r\n", a);
		return a;
	}
};

//全局函数
int test(int b)
{
	printf("global fun test %d.\r\n", b);
	return 0;
}

//定义一个函数指针类型
typedef int(*MyTypeFunc)(int event_id);

class Receiver
{
public:
	void AddFunList(MyTypeFunc fun)
	{
		if (fun)
			m_FunList.push_back(fun);
	}

	void OnFun(int event_id)
	{
		std::list<MyTypeFunc>::iterator it = m_FunList.begin();
		while (it != m_FunList.end())
		{
			MyTypeFunc fun = *it;
			if (fun)
			{
				fun(event_id);
			}
			++it;
		}
	}

private:
	std::list<MyTypeFunc> m_FunList;
};

int main()
{
	Receiver receiver;
    receiver.AddFunList(&ClaseA::test);
	receiver.AddFunList(test);

	receiver.OnFun(567);

	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hshqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值