【问题标题】:Button Class interacting with various-types of objects按钮类与各种类型的对象交互
【发布时间】:2013-09-03 18:46:13
【问题描述】:

使用 SFML,我创建了一个简单的按钮类,我计划将其开发为更高级的 GUI,可以在我制作的游戏中执行操作。现在我正在尝试决定按钮如何与游戏中的其他对象交互。我需要这些按钮能够与游戏对象、其他按钮以及许多尚未创建的东西进行交互。我想出的解决方案是这样的:

template <typename T> class Button 
{T* myLink;};//you can imagine functions that do things to the object at this address

通过这种方式,按钮可以链接到它计划与之交互的内容,我认为使用模板很好,因为现在我可以告诉按钮它将被激活/更改的类型。接下来,我想创建一个 Menu 类,它只是一个包含一堆按钮的框。但是这个 Menu 类不能只有一个 Button 向量,因为每个 Button 都是不同的类,具体取决于创建它的类型。

这个问题的最佳解决方案是什么,Menu 类应该是一个可以容纳多种类型按钮的模板,还是应该以某种方式使用继承?如果继承,请举个小例子。

谢谢。

【问题讨论】:

  • 除了发送buttonUpbuttonDown 信号到它所连接的事物(或事物)之外,Button 还能做任何事情吗?
  • 不,仅此而已。

标签: c++ class templates inheritance sfml


【解决方案1】:

我认为使用 Boost Signals 将是一个很好的解决方案。这样一来,您的菜单可以包含按钮向量,因为它们不会依赖于类型。

class Button
{
public:
    boost::signal<void ()> pushed; 
}

对于您需要按钮进行的​​任何“交互”,您都可以使用不同的信号。

【讨论】:

  • 谢谢,我以前从未使用过 Boost 或 Signals,但我会弄清楚的。我可以在我打算销售的东西中使用这个软件吗?
  • 是的 boost 有自己的许可证,“鼓励商业和非商业用途”。 boost.org/users/license.html
猜你喜欢
  • 1970-01-01
  • 2012-10-19
  • 2017-04-09
  • 2011-11-16
  • 2020-01-09
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多