34auto visit(Fn &&fn, QIODevice *socket, Args &&...args)
36 if (
auto *s = qobject_cast<QAbstractSocket *>(socket))
37 return std::forward<Fn>(fn)(s, std::forward<Args>(args)...);
38#if QT_CONFIG(localserver)
39 if (
auto *s = qobject_cast<QLocalSocket *>(socket))
40 return std::forward<Fn>(fn)(s, std::forward<Args>(args)...);
50 auto getState = [](
auto *s) {
51 using T = std::remove_pointer_t<
decltype(s)>;
52 if constexpr (std::is_same_v<T, QAbstractSocket>) {
54#if QT_CONFIG(localserver)
55 }
else if constexpr (std::is_same_v<T, QLocalSocket>) {
56 QLocalSocket::LocalSocketState st = s->state();
57 return static_cast<QAbstractSocket::SocketState>(st);
62 return visit(getState, device);
68 auto getError = [](
auto *s) {
69 using T = std::remove_pointer_t<
decltype(s)>;
70 if constexpr (std::is_same_v<T, QAbstractSocket>) {
72#if QT_CONFIG(localserver)
73 }
else if constexpr (std::is_same_v<T, QLocalSocket>) {
74 QLocalSocket::LocalSocketError st = s->error();
75 return static_cast<QAbstractSocket::SocketError>(st);
80 return visit(getError, device);
85 auto getPeerName = [](
auto *s) {
86 using T = std::remove_pointer_t<
decltype(s)>;
87 if constexpr (std::is_same_v<T, QAbstractSocket>) {
89#if QT_CONFIG(localserver)
90 }
else if constexpr (std::is_same_v<T, QLocalSocket>) {
91 return s->serverName();
96 return visit(getPeerName, device);