我用C++中的QtFramework開發。我遇到了這種轉換方法,即static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error)
。但我不明白這是什麼意思?這個轉換是什麼意思?
回答
static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error)
其中:
&QAbstractSocket::error
- 被命名爲error(...)
函數的地址;
它將它轉換爲void (QTcpSocket::*)(QAbstractSocket::SocketError)
- 這是一個指向QTcpSocket函數的成員的指針,該成員使用參數QAbstractSocket::SocketError
並返回void
。
所以我們從QAbstractSocket(也許是基類)成員函數的地址轉換爲QTcpSocket(也許是派生類)成員的函數指針。
注意
由於talamaki解釋真的很好這樣做的原因(即在一個連接選擇正確的函數(...);另一種方法是使用舊版本的Qt的連接()的風格,你可以明確地選擇正確的函數,但是如果你弄錯了代碼就會丟失編譯器時間的錯誤,我經常認爲這個問題更加清楚(例如,這個問題可能不需要問),下面是一個例子:
// Here we can explicitly choose the correct function,
// and its clear to any reader what is going on.
connect(pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(errorHandler(QAbstractSocket::SocketError)));
QTcpSocket inherits來自基類QAbstractSocket。有一種方法SocketError error()
和QAbstractSocket中的信號void error(QAbstractSocket::SocketError socketError)
,即具有相同的名稱。
在存在重載的情況下,函數名稱的地址本身是不明確的。您可以使用static_cast<>()
根據函數指針類型所隱含的函數簽名來指定要使用的函數。
由於void (QTcpSocket::*)(QAbstractSocket::SocketError)
是一個指向QTcpSocket函數類型的指針,它返回void
並採用參數QAbstractSocket::SocketError
,因此您的問題中的投射會選擇該信號。
例如,要使用函數指針語法連接到QAbstractSocket::error
信號,必須在靜態轉換中指定信號類型。
- 1. 0x0F是什麼意思?這個代碼是什麼意思?
- 2. 這個語法是什麼意思將argb轉換爲整數?
- 3. 這個SSIS包的數據轉換錯誤是什麼意思?
- 4. 這是什麼意思,這個Urikind.relative
- 5. 「轉換爲HTML5」是什麼意思?
- 6. 什麼是PPC,這是什麼意思?
- 7. 這是什麼`_time_independent_equals`是什麼意思?
- 8. PHP這是什麼意思?
- 9. 這是什麼意思? function()!()
- 10. 這是什麼意思?
- 11. 這是什麼意思? [c#]
- 12. System.BadImageFormatException這是什麼意思?
- 13. Ç - 這是什麼意思〜
- 14. :這是什麼意思?
- 15. IllegalStateException:這是什麼意思?
- 16. 這是什麼意思?
- 17. 這是什麼意思:&** this;
- 18. 這些是什麼意思?
- 19. 「這」是什麼意思?
- 20. 是什麼!在這意思?
- 21. CallLog.Calls.NEW?這是什麼意思?
- 22. 這是什麼意思-c
- 23. 這是什麼意思AfterWatermark.withEarlyFirings?
- 24. 這是什麼意思?
- 25. 這是什麼意思channel.id()?
- 26. 這是什麼意思 - C#
- 27. 這是什麼意思
- 28. 這是什麼意思?
- 29. 這是什麼意思?
- 30. 這是什麼意思?
說得好,先生。 +1也指出了可能會這樣做的原因,這也導致我在我的答案中增加一個註釋(作爲一種潛在的選擇) –