好的,我有一个包装所有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以具有不同的返回类型并使其忽略基类的实现?我真的很喜欢GetHandle()这个名字,并且不想更改它(尽管这是一个选择)。

还有另一种方法吗?我问是因为也许有一种方法可以使它忘记基类具有实现?

最佳答案

您需要协变返回类型。派生类的返回类型必须是从基类的返回类型派生的指针或引用。

这可以通过将HWNDHMENU包装在与API组织相似的类层次结构中来实现。如果模板都是通用的,则模板可能会有所帮助。

09-06 00:07