2015-09-05 64 views
0

我有一个关于ZeroMQ的问题,因为我在zmq :: proxy和zmq :: poll的ZMQ套接字上使用了指针。这样做会发生异常,并显示错误88(在非套接字上的套接字操作)。ZeroMQ如何在zmq :: proxy和zmq :: poll中管理套接字?

其实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会这样做?

+1

请张贴骨骼代码来了解你有什么企图 – CKmum

+0

CKmum我加入了代码,使我的问题更加清晰:) – FreeYourSoul

回答

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);