C ++ / CLI:无法显式实现具有不同返回类型的接口成员

时间:2013-03-10 20:55:31

标签: interface c++-cli explicit

假设我们有两个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限制是否有解决方法?

1 个答案:

答案 0 :(得分: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();