Ich entwickle mit QtFramework in C++. Ich stieß auf diese Konvertierungsmethode, die static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error)
ist. Aber ich habe nicht verstanden, was es bedeutet?Was bedeutet das konvertieren?
Antwort
static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error)
wo:
&QAbstractSocket::error
- ist die Adresse der Funktion error(...)
genannt;
Und es wirft es auf void (QTcpSocket::*)(QAbstractSocket::SocketError)
- das ist ein Zeiger auf eine Mitglied (von QTcpSocket) -Funktion, die einen Parameter QAbstractSocket::SocketError
und void
zurückgibt.
Wir übertragen also von der Adresse einer Funktion, die ein Mitglied von QAbstractSocket ist (vielleicht eine Basisklasse), zu einem Funktionszeiger, der ein Mitglied von QTcpSocket ist (vielleicht die abgeleitete Klasse).
Hinweis
Als talamaki wirklich schön den Grund dafür erklärt (dh die korrekte Funktion während eines connect (...) zu wählen; Eine Alternative ist die ältere Qt connect() Stil zu verwenden, die Sie kann die richtige Funktion auf Kosten der Verlierer Compiler-Zeit Fehler wählen, wenn Sie es falsch verstehen.Ich denke oft, dass dies klarer ist (zum Beispiel diese Frage würde wahrscheinlich nicht gefragt werden). Hier ist ein Beispiel:
// 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 erbt aus der Basisklasse QAbstractSocket. Es gibt ein Verfahren SocketError error()
und ein Signal void error(QAbstractSocket::SocketError socketError)
in QAbstractSocket, d.h. mit dem gleichen Namen.
Bei Überlastungen ist die Adresse des Namens der Funktion an sich mehrdeutig. Sie können static_cast<>()
verwenden, um anzugeben, welche Funktion gemäß der Funktionssignatur verwendet werden soll, die vom Funktionszeigertyp impliziert wird.
Der Cast in Ihrer Frage wählt das Signal aus, weil ein Zeiger auf einen Funktionstyp in QTcpSocket ist, der void
zurückgibt und einen Parameter QAbstractSocket::SocketError
übernimmt.
Um beispielsweise mit der Syntax des Funktionszeigers eine Verbindung zum Signal QAbstractSocket::error
herzustellen, müssen Sie den Signaltyp in einer statischen Darstellung angeben.
- 1. Was bedeutet das? (int &) a
- 2. Was bedeutet das Präfix:
- 3. Was bedeutet das - C#
- 4. Was bedeutet das? javascript: //
- 5. Was bedeutet das? Diese
- 6. „Kann nicht auf eine SELECT-Anweisung konvertieren“ Was das bedeutet
- 7. Was bedeutet "[das]" in C++ bedeutet
- 8. MySQL 1443: Was bedeutet das?
- 9. Was bedeutet das? "alienPosition = alien.position"
- 10. Was bedeutet das gs-Protokoll?
- 11. Was bedeutet das Schlüsselwort jsr?
- 12. Was bedeutet das externe Schlüsselwort?
- 13. Was bedeutet das Schlüsselwort "final"?
- 14. Schienen Protokolle. Was bedeutet das?
- 15. was bedeutet das Javascript bedeuten
- 16. Was bedeutet das Schlüsselwort KEY?
- 17. Was bedeutet das mit 'type'
- 18. Go "& ^" Operator, was bedeutet das?
- 19. Was bedeutet das? Boolean Header
- 20. Was bedeutet das in Ruby?
- 21. C++ Was bedeutet das Prozentzeichen?
- 22. Was bedeutet das Suffix "h"?
- 23. $ .text (["someText"]) - Was bedeutet das?
- 24. Was bedeutet das() in Java?
- 25. C# Methodenparametersyntax - was bedeutet das?
- 26. XoffLimit, XonLimit - was bedeutet das?
- 27. Was bedeutet das Wort "wörtlich"?
- 28. Was bedeutet das offene Aufzeichnungsmuster?
- 29. Was bedeutet das Symbol "Das" in Scala
- 30. Was bedeutet das Fragezeichen in CoffeeScript?
Gut gesagt, mein Herr. +1 für den Hinweis, warum man das auch tun könnte, was mich auch dazu bringt, meiner Antwort eine Notiz hinzuzufügen (als mögliche Alternative) –