2

戻り値の型が異なる Foo() メンバーを宣言する 2 つの 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 の制限に対する回避策はありますか?

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 に答える