2013-03-10 28 views
1

假設我們有兩個C++/CLI接口聲明具有不同返回類型的Foo()成員。 C++/CLI:無法明確實現具有不同返回類型的接口成員

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

一句話不,這是一個設計問題,而不是C++ \ CLI或任何其他語言 – makc 2013-03-10 21:03:19

+0

嗯,c#允許我有兩個相同名稱的方法,不同的返回值在一個類中明確實現。所以我不會說它不是C++/cli相關的。 – edwabr123 2013-03-11 16:20:09

回答

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

哇,這很容易)謝謝你幫助我! – edwabr123 2013-03-11 16:24:35

+0

再次感謝您給我正確的答案。現在我用C#將代碼轉換爲C++/cli,進度非常快。除了我再次陷入與接口事件顯式實現相關的另一個問題之外。也許你可以再次幫助我,我真的很感激它。請看看:[鏈接](http://stackoverflow.com/questions/15404891/c-cli-interface-event-explicit-implementation) – edwabr123 2013-03-14 09:06:00

相關問題