【发布时间】:2013-05-10 23:22:14
【问题描述】:
我有一个相关类的集合,调用它们
class Manager {
private:
std::vector<Setting> m_settings;
}
class Setting {
private:
std::vector<Action> m_actions;
}
class Action {
private:
Keybind m_keybind;
}
class Keybind {
public:
UpdateKeybind;
private:
TYPE keybind;
}
从伪 C++ 代码中可以看出,设置有动作,动作只有一个键绑定。现在,作为我的应用程序的用户,您可能希望更新 Keybind,是吗?
我目前在与每个操作相关联的键绑定类型对话框中有按钮,因此该操作可以处理更新它自己的键绑定。
我的问题:
如何确保 Keybinding 没有绑定到另一个对象?
可能的解决方案:
- 将 UpdateKeybind 本身移动到 Manager 类,然后让 Manager 查询所有设置。
- 在 Action/Setting/Keybind 中有一个父指针,以便 Action 可以查询管理器以获取更新的键绑定。
- 让操作查询其他操作(据我所知,在概念上不是很好)。
我需要你什么:
就可维护性、速度、易于理解和 OOP 的适当性而言,最严格的方法是什么,以实施检查是否已经找到键绑定,无论是在我建议的解决方案之外还是完全其他的方法。我已经尝试过 1 号——它有效,但我觉得它可能会更好,你挖吗? 我在 StackOverflow 上找不到类似的问题,但如果你有,我很乐意看到它们!
任何其他专业提示,有待改进的地方都会有所帮助。
【问题讨论】:
-
是
Keybind和Action严格一对一还是可以通过多个键执行操作? -
好问题。实现上是1对1的关系,用户可以通过一个接口修改keybind(wxWidgets的东西)
-
使用 std::map
(或 std::unordered_map)。要查看键是否绑定到操作,请检查映射是否包含键(std::map::count),要更改操作的键绑定,请将其从映射中删除并使用新的键绑定添加它。你拥有它的方式对我来说似乎有点倒退 - 你的代码将动作映射到键绑定,但我敢打赌你想查找给定键绑定的动作。地图应该可以解决这个问题。
标签: c++ oop composition