好的我有一个包装所有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
};
};
但是,编译器给出了一个关于重载Base Class'GetHandle函数的错误返回类型的错误。
如何重载GetHandle
以使其具有不同的返回类型并使其忽略Base类的实现?我非常喜欢这个名字GetHandle()
并且不想改变它(虽然这是一个选项)..
还有其他方法吗?我问,因为也许有办法让它忘记基类有一个实现?
答案 0 :(得分:2)
您需要协变返回类型。派生类的返回类型需要是从基类的返回类型派生的指针或引用。
这可以通过将HWND
和HMENU
包装在与API组织并行的类层次结构中来实现。如果模板全部通用,模板可能会有所帮助。