我们都习惯了在c#中使用事件,但是c++中没有默认的事件机制,所以在编写c++/cli时,这将是一个令人困扰的问题
在c++中常见的方式是传入一个回调,在特定的时机,通过调用回调函数,执行上层的代码。
这种方式能够解决一部分场景的问题,但是另外一些场景,比如事件的invok列表,责任链模式都不能实现。
另外常见的回调对象,要求一次实现多个回调函数,这样容易将各个业务的处理都聚集在同一个回调对象中,不利于解耦。
在c++/cli中,一种可以参考的处理方式是使用一个托管类对非托管的回调类进行封装。向非托管的回调类传入一个托管类的委托函数后,由委托函数重新引发.NET事件。
//非托管部分Callback.h
public class Callback:Public AbstractCallback
{
private:
typedef std::function<void(void)> FooCallback;
FooCallback _fooCallback;
public:
inline void OnFoo() override
{
if