好的,我有一个包装所有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()
这个名字,并且不想更改它(尽管这是一个选择)。还有另一种方法吗?我问是因为也许有一种方法可以使它忘记基类具有实现?
最佳答案
您需要协变返回类型。派生类的返回类型必须是从基类的返回类型派生的指针或引用。
这可以通过将HWND
和HMENU
包装在与API组织相似的类层次结构中来实现。如果模板都是通用的,则模板可能会有所帮助。