我有一个与ZeroMQ有关的问题,因为我在ZMQ套接字上使用了指针用于zmq :: proxy和zmq :: poll。这样做会发生错误88(非套接字上的套接字操作)的异常。
实际上ZeroMQ希望用户发送一个在void *(信息源)中转换的结构
我在官方文档中做了一些研究,但是我没有发现为什么ZeroMQ在套接字上不使用指针。
编辑:这是我认为正确的代码
zmq::socket_t frontend_;
zmq::socket_t backend_;
zmq::proxy(&frontend_, &backend_, nullptr);
而实际起作用的代码就是这个:
zmq::socket_t frontend_;
zmq::socket_t backend_;
zmq::proxy((void *)frontend_, (void *)backend_, nullptr);
对我来说很奇怪。为什么ZeroMQ会这样做?
没有什么奇怪的。
socket_t
类中存在一个指针,并且运算符static_cast<void *>()
方法正在返回该指针,而不是使用该类的实际实例。
这篇文章有助于我了解的正式文档测试中zmq
出现了问题。在c ++ 11中,不可能直接使用
zmq::proxy(frontend_, backend_, nullptr);
因为该转换在zmq
代码中是显式的。因此,您需要像这样正确地转换套接字:
zmq::proxy(static_cast<void *>(frontend_), static_cast<void *>(backend_), nullptr);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句