我正在寻找一种方法来传递一个对象(在我的情况下为vector<long>
)作为C ++ 11风格的WPARAM
。
我发现的教程使用C风格的强制转换或reinterpret_cast
来传递指向对象的指针。这要求邮件的收件人在收到邮件后正确处理该文件。
有没有办法使用unique_ptr
传递对象?收件人可以完全拥有该对象。
答案 0 :(得分:3)
如果您将指针传递给带有Windows消息的对象,那么您需要确保两件事:
如果您知道肯定会处理该消息,那么您可以在发送消息时在源.release()
上呼叫unique_ptr
,然后使用另一个unique_ptr
获取处理程序中的所有权。
问题在于确保在未处理消息时清理它。这很棘手,因为除非您使用SendMessage
(不是PostMessage
)并使用返回值来表示参数已被声明,否则通常不会检查干净的方法。
答案 1 :(得分:1)
没有这样的方法。 WPARAM在标头中定义为UINT_PTR。它只是一个足以在所有架构中接受指针的数字。您可以传递指针的原因是指针本身只是数字。
答案 2 :(得分:1)
您可以执行以下操作:在堆上分配shared_ptr<>
(!),将指针作为WPARAM传递给它,在接收和删除时复制shared_ptr<>
你得到的WPARAM
。