0

OK、すべての WinAPI コントロールをラップして Java/C#/.Net コントロールのように動作させるクラスがあります (はい、既にこれを行うライブラリがあることは知っています)。

class Control
{
    public:
          //Bunch of other stuff..

        virtual HWND GetHandle() const;
};

および次のような派生クラス:

class MenuBar: public Control
{
    public:
        //Bunch of other stuff..

        virtual HMENU GetHandle() const;


        enum class Flags
        {
            POPUP = MF_POPUP, STRING = MF_STRING
        };
};

ただし、コンパイラは、基本クラスの GetHandle 関数をオーバーロードするための間違った戻り値の型に関するエラーを表示します。

GetHandleをオーバーロードして、別の戻り値の型を持ち、Base クラスの実装を無視するにはどうすればよいですか? 私はその名前が本当に好きで、GetHandle()変更したくありませんでした (オプションですが)。

別の方法はありますか?おそらく、基本クラスに実装があることを忘れさせる方法があるので、私は尋ねていますか?

4

1 に答える 1

2

共変の戻り値の型が必要です。派生クラスからの戻り値の型は、基本クラスの戻り値の型から派生したポインターまたは参照である必要があります。

これは、API の編成に類似するクラス階層をHWNDラップすることによって実現できます。HMENUそれがすべて一般的である場合、テンプレートが役立つ場合があります。

于 2013-05-25T02:15:57.440 に答える