c++ cli接口事件显式实现



我正在尝试将c#代码转换为c++/cli。一切都很顺利,直到我开始将接口事件显式实现转换为c++/cli语法。

假设在c#中我有这个接口

public interface Interface
{
    public event MyEventHandler Event;
}

在Class中以显式的方式实现,因此它不会与另一个成员的名称冲突:

public interface Class : Interface
{
    event MyEventHandler Interface.Event;
    public event AnotherEventHandler Event;
}

我正试图将Class转换为c++/cli如下:

public ref class Class : public Interface
{
    virtual event MyEventHandler^ Event2 = Interface::Event
    {
    }
    ...
};

这不会编译给我语法错误在"…"= Interface::Event"部分。有没有人知道什么是正确的语法,或者它甚至存在于c++/cli中?我花了一些时间在网上搜索,但没有碰到任何有用的。

更新:这里是完整的c++/cli代码,演示了这个问题:

public delegate void MyEventHandle();
public delegate void AnotherEventHandle();
public interface class Interface
{
    event MyEventHandler^ Event;
};
public ref class Class : public Interface
{
public:
    virtual event MyEventHandler^ Event2 = Interface::Event
    {
        virtual void add(MyEventHandle^) {}
        virtual void remove(MyEventHandle^) {}
    }
    event AnotherEventHandler^ Event;
};

vc++ 2012的错误输出为"error C2146: syntax error:在标识符'MyEventHandler'之前缺少';"

你必须让它看起来像这样:

event MyEventHandler^ Event2 {
    virtual void add(MyEventHandler^ handler) = Interface::Event::add {
        backingDelegate += handler;
    }
    virtual void remove(MyEventHandler^ handler) = Interface::Event::remove {
        backingDelegate -= handler;
    }
};

最新更新