gpt4 book ai didi

c++ - 将基类初始化为派生基类?

转载 作者:行者123 更新时间:2023-11-28 08:24:04 24 4
gpt4 key购买 nike

我不认为这是可能的,但如果是的话,我会发现它非常有用。

我正在制作一个 Gui API,用户可以在其中执行绘画事件。可以说我想制作一个数字文本框。好吧,它似乎只是从 TextBox 继承的好习惯。这样做的问题是,自从

TextBox::paint();  

只会调用我的默认绘制方式。

如果他们必须维护所有的 TextBox 衍生产品,那将很烦人。

有没有办法解决这个问题?

假设我的 TextBox 绘制了一个正方形,然后数字部分添加了一个圆圈,但是从我的 TextBox 派生的用户文本框绘制了一个三角形,而我的数字部分从我的 TextBox 派生了我希望结果是三角形,圆形.

谢谢

最佳答案

正如我在评论中所说,我认为桥接模式实际上是您想要的,但是由于您试图将用户的类作为 NumericField 事物的基类插入,您这样做的方式是:

template < typename Base = TextField >
struct NumericField : Base
{
...
void paint() { Base::paint(); draw_circle(); }
};

现在用户可以使用 NumericField<>或者他们可以插入他们的类(class):

struct UserField : TextField
{
...
void paint() { draw_triangle(); }
};
NumericField<UserField> my_field;

桥梁答案看起来更像这样:

struct TextField
{
TextField() : extender_(new null_extender) {}
...
void set_extender(extender*);
virtual void paint() { draw_square(); extender_->paint(); }
...
};

struct extender { virtual void paint() = 0; };
struct null_extender { void paint() {}};
struct numeric_extender { void paint() { draw_circle(); }};

struct UserField
{
void paint() { draw_triangle(); extender()->paint(); }
};

其中缺少很多细节,但这就是故事。

关于c++ - 将基类初始化为派生基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688138/

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