我正在尋找一種方式將C++ 11樣式中的對象(vector<long>
在我的案例中)作爲WPARAM
傳遞給我。使用智能指針將對象作爲WPARAM傳遞到窗口消息中
我發現的教程使用C風格演員或reinterpret_cast
傳遞指向對象的指針。這要求消息的接收者在收到消息後妥善處理。
有沒有辦法通過使用unique_ptr
來傳遞對象?收件人可以完全擁有該對象。
我正在尋找一種方式將C++ 11樣式中的對象(vector<long>
在我的案例中)作爲WPARAM
傳遞給我。使用智能指針將對象作爲WPARAM傳遞到窗口消息中
我發現的教程使用C風格演員或reinterpret_cast
傳遞指向對象的指針。這要求消息的接收者在收到消息後妥善處理。
有沒有辦法通過使用unique_ptr
來傳遞對象?收件人可以完全擁有該對象。
如果你傳遞一個指向對象與Windows消息,那麼你需要確保兩兩件事:
如果您知道該消息一定會再處理,您可以在發送消息時,源unique_ptr
上調用.release()
,然後採取所有權在哈ndler與另一個unique_ptr
。
如果郵件未處理,確保清除問題。這很棘手,因爲除非您使用SendMessage
(而不是PostMessage
),並且使用返回值來傳達參數已被聲明,否則通常沒有乾淨的方法來檢查。
有沒有這樣的方式。 WPARAM在頭文件中定義爲UINT_PTR。它只是一個足夠大的數字,可以在所有體系結構中接受指針。你可以傳遞一個指針的原因是指針本身就是數字。
你可以做下面的技巧:你分配一個shared_ptr<>
上堆,指針傳遞給它作爲WPARAM,複製上收到shared_ptr<>
和刪除您有作爲WPARAM
的一個(!)。
可能重複http://stackoverflow.com/questions/7130633/how-to-use-postthreadmessage-to-pass-a-struct/7130683#7130683。 – rodrigo