我正在设计/编写一个小型 UI 工具包(出于自我完善的目的,还有什么?),我不确定哪种 API 在以下方面会更好:
- 最低WTF?等级。
- 最灵活。
- 最简洁,但具有描述性
- 最适合标准 C++。
一些重要的元素:
- 该类
window
很好地代表了一个窗口,可以显示、隐藏、最小化、最大化、全屏最大化和关闭。 - 我有一个
proxy_property
可以分配任意获取和设置函数的类,例如可以反映应该通过某些外部 API 调用获取或设置的当前值。 - 我还有一个
property
可以连接(即观察到)的类,当它被分配一个新的/不同的值时,会向它的观察者发出这个新值的信号。
我不确定处理窗口状态的最佳方法是什么:
- 私有成员变量,只能通过
hide()
等isVisible()
成员函数访问,Qt 风格。 hide()
由,show()
等 getter支持并相应更新的只读属性(将需要一些额外的实现,因为我目前还没有解决这个问题) 。proxy_property
可以分配新状态的A ,在分配新值时会导致调用hide()
、show()
等或它们的组合。
乍一看,出于 3 的原因,我更喜欢 3 号,但考虑到其他条件,我不确定这种设计的效果如何。可以说我没有看到我的 3 号在任何地方使用过,而且我害怕过于依赖我的proxy_property
概念,因为它可能会产生比其价值更多的开销(另一方面,这是我们正在谈论的 UI 代码,所以仍然会有开销)。
为了清楚起见:
enum class window_state { windowed, hidden, minimized, maximized, fullscreen_maximized };
class window
{
public:
proxy_property<window_state> state;
//....
};
所以可以做
some_window.state = window_state::minimized;
实际做一些更传统的事情,例如
some_window.minimize();
当然,最终结果在功能上是相同的。只是 API 完全不同。