gpt4 book ai didi

C++抽象用户界面设计

转载 作者:行者123 更新时间:2023-11-28 07:42:36 25 4
gpt4 key购买 nike

我正在为各种目标编写跨平台 UI 工具包,其中一些是嵌入式的。其中一些平台支持“保留”渲染模式,其中一些更“直接”,所以我认为对于我的视觉效果我有两棵树 - 伪代码:

abstract class Visual 
{
Visual( Widget widget ) { this.widget = widget; }
}

abstract class RetainedVisual : Visual
{
abstract void Setup( Renderer r );
abstract void Teardown( Renderer r );
}

abstract class ImmediateVisual : Visual
{
abstract void Paint( Renderer r );
}

到目前为止一切顺利。但现在我还有 ContainerVisual 类,它们对小部件层次结构进行编码:

abstract class ContainerVisual : Visual
{
void AddChild( Visual child ) {}
}

这迫使我拥有一个 ImmediateContainerVisual 和一个开始显得臃肿的 RetainedContainerVisual 类。更好设计的想法?

最佳答案

最好的选择是将 3 个类组合到同一个 Visual 类:

class Visual {
Visual(Widget w);
bool SupportsSetupTearDown();
bool SupportsPaint();
abstract void Setup(Renderer r);
abstract void TearDown(Renderer r);
abstract void Paint(Renderer r);
};

那么容器小部件就不会有任何问题。所有的视觉对象都应该实现这两种渲染方法,当目标发生变化时,系统将开始调用不同的函数。这也允许有条件地不实现一种方式,并且可以构建从 SetupTearDown 转换为 Paint 以及从 Paint 转换为 SetupTearDown 的特殊视觉效果。

关于C++抽象用户界面设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495986/

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