gpt4 book ai didi

c++builder - VCL 多重继承

转载 作者:行者123 更新时间:2023-12-04 07:02:24 24 4
gpt4 key购买 nike

我正在尝试开发一组控件,它们在大小方面都有许多共同的行为。我认为这是一个需要多重继承的例子(尽管我完全愿意接受任何相反的建议)。我想做的基本上是一个mixin模式

class Sizable {        
...
public:
ResizeMe();
ResetText();
...
};

class sizeButton : public Sizable, public TButton {
...
};

class sizeEdit : public Sizable, public TEdit {
...
};

等等……

我已经在 Sizable 类中编写了大量的大小调整代码并对其进行了测试,这很好,但现在我已经设置了其余的结构(是的,我可能应该首先为这些类编写一个骨架)并且有遗憾地发现:
[BCC32 Error] szButton.h(15): E2278 Multiple base classes not supported for VCL classes

我已经删除了所有不需要成为成员函数的函数(例如测量字符串的长度),但是仍然有很多函数是不可能的。

有没有人有任何设计建议,这样我就不必复制大量代码?

最佳答案

Delphi(以及因此主要用 Delphi 编写的 VCL)不支持类的多重继承。但是,从 v6 开始,当 VCL 类用作祖先时,它确实支持接口(interface)的多重继承,例如:

// must be a pure virtual class with no data members
// and no implementation of its own...
class Sizable
{
public:
virtual void ResizeMe() = 0;
virtual void ResetText() = 0;
...
};

class sizeButton : public TButton, public Sizable
{
public:
virtual void ResizeMe();
virtual void ResetText();
...
};

class sizeEdit : public TEdit, public Sizable
{
public:
virtual void ResizeMe();
virtual void ResetText();
...
};

关于c++builder - VCL 多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com