2

假设我们有两个 C++/CLI 接口声明具有不同返回类型的 Foo() 成员。

public interface class InterfaceA
{
    bool Foo();
};

public interface class InterfaceB
{
    int Foo();
};

我们在这里要做的是有一个类,实例化一个可以通过上述接口访问的对象。因此,直接的方法是:

public ref class Class : InterfaceA, InterfaceB
{
    virtual bool Foo() = InterfaceA::Foo { return true; }
    virtual int Foo() = InterfaceB::Foo { return 10; }
};

不幸的是,这给了我们编译器错误“重载的函数仅因返回类型不同而不同”。这个 C++/CLI 限制有什么解决方法吗?

4

1 回答 1

2

不,您必须重命名该方法。例如:

public ref class Class : InterfaceA, InterfaceB
{
public:
    virtual bool Foo() { return true; }
    virtual int Foo2() = InterfaceB::Foo { return 10; }
};

请注意,这绝不是一个真正的问题。如果代码出于某种原因引用了 Class 而不是接口,那么它总是可以使用强制转换调用 InterfaceB::Foo():

Class^ obj = gcnew Class;
safe_cast<InterfaceB^>(obj)->Foo();
于 2013-03-10T21:27:38.253 回答