【发布时间】:2016-09-07 08:28:04
【问题描述】:
我正在使用 OIS 来处理我与 Ogre 的输入,目前,在 KeyPress/Release 上,将在订阅者之间构建和分发如下所示的消息对象。
class Message
{
public:
Message();
~Message();
inline void SetKeyEvent(const OIS::KeyEvent& keyEvent) { _keyEvent = keyEvent; }
const OIS::KeyEvent& GetKeyEvent() const { return _keyEvent; }
private:
OIS::KeyEvent _keyEvent;
};
由于每当通过键盘接收输入时都会构造/销毁此对象,因此我尝试存储一个预先构造的 Message 对象,然后在分发之前使用新数据简单地更新 _keyEvent 字段。
问题是OIS::KeyEvent 对象有一个 const 成员,这使我无法使用赋值运算符。 SetKeyEvent 方法给了我以下语法错误:
function "OIS::KeyEvent::operator=(const OIS::KeyEvent &)" (declared implicitly) cannot be referenced -- it is a deleted function
我想知道实现此功能的最佳方法是什么?
提前致谢
编辑:为了澄清,我已经尽可能使用初始化列表。我的意图是预先构建 Message 对象,然后使用 SetKeyEvent 方法使用 OIS 触发的 KeyPress 事件中的新事件数据更新 _keyEvent 字段。我想知道这是否可行,如果可行,最好的方法是什么。
【问题讨论】:
-
这与 const 成员无关。这意味着
OIS::KeyEvent没有赋值运算符。 -
@Hayt 它没有默认赋值运算符因为里面有一个 const 成员。
-
你是对的。我完全没有以某种方式建立这种联系。
-
您真的需要存储预先构建的消息吗?它还有其他成员吗?