在c#winform中,我们可以创建一个覆盖基类某些功能的对象,而无需了解基类的实现。例如,我们创建了TouchButton:Button,然后仅覆盖WndProc函数,并且Button的实现对我们不可见。
在C ++中,我有一个接口,例如包含所有虚拟方法的类IButton。在我的dll实现中,它将返回IButton的实现。假设现在我想在不知道Button实现的情况下重写某些方法。
class TouchButton : public IButton
{
public:
IButton& mBase;
TouchButton(IButton& Base)
: mBase(Base)
{};
void SetSize(int x,int y)
{
mBase.SetSize(x,y);
}
void Visible(bool v)
{
mBase.Visible(v);
}
void Click(int x,int y)
{
// override
}
}
好的,现在的事情是我只想覆盖一个函数,但是我不得不一次又一次地复制和粘贴这些mBase.Function(...)事情,这绝对不是实现它的优雅方法。有没有更好的方法来归档相同的结果?
提前致谢。
最佳答案
您可以添加一个IButtonForwarder来存储引用并为每个成员执行默认转发:
class IButtonForwarder : public IButton
{
public:
IButton& mBase;
IButtonForwarder(IButton& Base)
: mBase(Base)
{};
virtual void SetSize(int x,int y)
{
mBase.SetSize(x,y);
}
virtual void Visible(bool v)
{
mBase.Visible(v);
}
virtual void Click(int x,int y)
{
mBase.Visible(v);
}
};
现在,您的TouchButton只需要传递对象并覆盖适当的成员:
class TouchButton : IButtonForwarder
{
public:
TouchButton(IButton& Base)
: IButtonForwarder(Base)
{};
virtual void Click(int x,int y)
{
// override
}
};