我有一个关于ZeroMQ的问题,因为我在zmq :: proxy和zmq :: poll的ZMQ套接字上使用了指针。这样做会发生异常,错误88(非套接字上的套接字操作)。
实际上ZeroMQ希望用户发送一个无效的结构*(source of the information)
我在官方文档中做了一些研究,但我没有找到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会这样做?
答案 0 :(得分:1)
没有什么奇怪的。
socket_t
类中存在一个指针,运算符static_cast<void *>()
方法返回此指针而不是使用该类的实际实例。
Can a cast operator be explicit?
这篇文章帮助我了解问题出现在official documentation test of zmq
中。在c ++ 11中,不可能直接使用
zmq::proxy(frontend_, backend_, nullptr);
因为转换在zmq
代码中是明确的。所以你需要像这样正确地转换套接字:
zmq::proxy(static_cast<void *>(frontend_), static_cast<void *>(backend_), nullptr);