gpt4 book ai didi

c++ - 自定义 UI 元素使用的智能指针选择

转载 作者:行者123 更新时间:2023-11-28 05:57:46 25 4
gpt4 key购买 nike

我正在构建一个前端是从头开始制作的跨平台移动应用程序。简短的哲学是这样的:

  • 每个 UI 元素直接或间接继承自 Element .它具有大小、在屏幕上的位置等基本数据结构。
  • UI 控件可以继承继承 Element 的中介喜欢Touchable , Scrollable等。从类的中间继承 Element是虚拟的。
  • 每个Element descendant 可以有任意数量的子元素。

例子:

class Touchable : public virtual Element { ... };
class HasText : public virtual Element { ... };

class Button : public Touchable, public HasText { ... };

class LoginView : public Element {
Button* _btnLogin;
TextBox* _txtPassword;
...
};

Element有一个 std::vector<???_ptr<Element>>包含所有元素。它是这样使用的:

LoginView::LoginView(...) {
_btnLogin = std::make_???<Button>();
_btnLogin.setText("Login");
_btnLogin.setFont("Helvetica"); // initialize
...
addSubview(_btnLogin); // add to vector
}

void LoginView::_someOtherFunc() {
_btnLogin->isVisible = false; // use some time later
}

在构建 View 期间,Button 的新实例已创建并初始化,但仅在添加到层次结构( vector )时才绘制。 但是 可以在以后的任何时间使用(所以 unique_ptr 是不可能的,因为我必须将它移动到 vector ,从而“失去”它在 View 中的所有权)。此外,当对象从 vector 中移除时,它不应被删除,但如果它在 View 中被删除它不应该在 vector 中有效(从 vector 中移除它只会暂停它的绘制)。

问题是:哪种智能指针类型最适合这种情况?或者可能有更好的方法来实现相同的结果?

最佳答案

所以您的 View 是这里的资源管理器,即它们负责分配 UI 元素并在 UI 的生命周期内根据我想象的交互删除其中的一些元素。

我不明白为什么/为什么所有元素都存储在 Element 类的 vector 中?

一般来说,据我了解,资源管理器(即 Views)应该创建共享指针,我假设它们可以在它们之间交换(共享所有权),以及“显示” vector (控制绘图的那个)应该存储弱指针。这样,无论何时绘制循环遍历 vector ,它都可以检查并删除已被破坏的元素。出于这个原因,我还建议不要使用 vector,而是使用 list,这样您就可以轻松且廉价地插入/删除/迭代要绘制的元素。

关于c++ - 自定义 UI 元素使用的智能指针选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828092/

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