提问人:Michael Choi 提问时间:6/15/2019 最后编辑:Michael Choi 更新时间:6/15/2019 访问量:42
IO 是否可以使用 mutable ?
Is using mutable acceptable for IO?
问:
背景:我正在开发一个用于体验的 UI Widget 工具包,我遇到的一个问题是事件的恒定性。所有事件都强制为常量,因此同一事件在小部件之间的传播将保持一致。
这对于鼠标事件和关键事件是可以的;但是,对于绘画事件,我无法保持恒定性,因为绘画事件本质上会改变它们所绘制的任何图形上下文。
在此示例中,我想创建一个可变的图形上下文,以便事件本身保持不变。我意识到可变的危险,所以如果这是不可接受的,我想听听反对可变的理由和它的替代品。
为了完整起见,下面是我的一些代码示例来说明这个问题:
namespace event {
struct Mouse {
struct Interface {
virtual ~Interface() = 0;
virtual void on_l_press(const Mouse&) {}
virtual void on_l_release(const Mouse&) {}
virtual void on_l_click(const Mouse&) {}
virtual void on_l_drag(const Mouse&) {}
virtual void on_m_press(const Mouse&) {}
virtual void on_m_releas(const Mouse&) {}
virtual void on_m_click(const Mouse&) {}
virtual void on_m_drag(const Mouse&) {}
virtual void on_r_press(const Mouse&) {}
virtual void on_r_release(const Mouse&) {}
virtual void on_r_click(const Mouse&) {}
virtual void on_r_drag(const Mouse&) {}
virtual void on_move(const Mouse&) {}
virtual void on_enter(const Mouse&) {}
virtual void on_exit(const Mouse&) {}
};
gmt::Point<float> point = { -1, -1 };
};
struct Paint {
struct Interface {
virtual ~Interface() = 0;
virtual void on_paint(const Paint&) {}
};
gmt::Rect<float> dirty;
mutable gfx::Context context;
};
}
我听说过 Haskell 中的 IO Monads,但不幸的是,我对它们没有太多经验或理解。
另外,作为一个小说明,我意识到这些事件应该是带有 getter 和 setter 的类。一旦我对最终确定事件有了更好的想法,我就计划改变这一点。
答: 暂无答案
评论
const
window->on_paint(Paint_Event)
const
window
const
Paint_Event