2015-09-05 102 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);