【问题标题】:C++/CLI: Cannot explicitly implement interface member with different return typeC++/CLI:无法显式实现具有不同返回类型的接口成员
【发布时间】:2013-03-10 20:55:31
【问题描述】:

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

【问题讨论】:

  • 一句话不,这是一个设计问题,而不是 C++\CLI 或任何其他语言
  • 嗯,c# 允许我在一个类中显式地实现两个具有不同返回值的同名方法。所以我不会说它与 c++/cli 无关。

标签: interface c++-cli explicit


【解决方案1】:

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

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();

【讨论】:

  • 哇,这很简单)谢谢你帮助我!
  • 再次感谢您给我正确的答案。现在,我的代码从 c# 转换为 c++/cli 的速度非常快。除了我再次遇到与接口事件显式实现相关的另一个问题。也许你可以再次帮助我,我真的很感激。请看:link
猜你喜欢
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多