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