MAKRO Problem:
-
Hallo Leute,
ich habe ein Problem, weiß aber überhaupt nicht wie ich das angehen könnte:) ich verwendet ein Lib (Crow Webserver)
damit "erstelle" einen websocket:
int main() { crow::SimpleApp app; // Klappt CROW_WEBSOCKET_ROUTE(app, "/viewer").onopen(....); //Kappt nicht CrownBackend x(app); ... server->port(18080).run(); };
nunm öchste ich aber en Websocket in einer Klasse kappseln, und gebe der Klasse
die web-server instanz mit will im c-tor:class CrownBackend { public: CrownBackend(crow::SimpleApp& backend) { //Hier compilerfehler CROW_WEBSOCKET_ROUTE(backend, "/ws").onopen(...) ... } }
und bekomme den Fehler:
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Fehler (aktiv) E0304 Keine Instanz von Funktionsvorlage "crow::TaggedRule<Args...>::websocket [mit Args=<>]" stimmt mit der Argumentliste überein. UiBackend ...\UiBackend.cpp 132 Fehler C2672 "crow::RuleParameterTraits<crow::TaggedRule<>>::websocket": keine übereinstimmende überladene Funktion gefunden UiBackend ...\UiBackend.cpp 132 Fehler C2770 Ungültige explizite Vorlage-Argumente für „crow::WebSocketRule<App> &crow::RuleParameterTraits<crow::TaggedRule<>>::websocket(App *)“. UiBackend ...\UiBackend.cpp 132
das steckt im Makro:
#define CROW_WEBSOCKET_ROUTE(app, url) app.route<crow::black_magic::get_parameter_tag(url)>(url).websocket<decltype(app)>(&app)
Ist vll. bissel viel verlang euch damit zu beschäftigen.. aber vll. seht ihr gleich was;)
Danke und Schönes WE schonmal
-
Moin,
ist das Beispiel minimal? Der Code der nicht geht ist ja etwas anders als der Code der scheinbar geht. Unter anderem sieht das
onOpen(...)
bisschen komisch aus. Die Methode heißt jaonopen
und hast du ja auch schon davor verwendet.
Ich sehe aber natürlich nicht, wo jetzt deine Zeile 132 istAnsonsten: Die Autoren helfen auch immer gerne -> https://gitter.im/crowfork/community. Einfach mit Matrix Client der Wahl (Gitter, Element etc.) joinen und Frage stellen. Hilfe kommt immer schnell.
-
@Leon0402 sagte in MAKRO Problem::
Moin,
ist das Beispiel minimal? Der Code der nicht geht ist ja etwas anders als der Code der scheinbar geht. Unter anderem sieht das onOpen(...) bisschen komisch aus. Die Methode heißt ja onopen und hast du ja auch schon davor verwendet.
Ich sehe aber natürlich nicht, wo jetzt deine Zeile 132 ist
Ansonsten: Die Autoren helfen auch immer gerne -> https://gitter.im/crowfork/community. Einfach mit Matrix Client der Wahl (Gitter, Element etc.) joinen und Frage stellen. Hilfe kommt immer schnell.servus Leon,
sorry habe es gerade editiert.. muss natürlich "onopen" heißen. Also so sieht die Geschichte (pseudo) aus. Das genannte Makro funktioniert nicht wenn ich versuche es in einer anderen Instanz aufzurufen in der "SimpleApp" instanziiert wurde.!?
-
Ich denke, es liegt an der Referenz (von
crow::SimpleApp& backend
) beidecltype(app)
.Erstelle mal ein neues Makro (und benutze es dann):
#define CROW_WEBSOCKET_ROUTE_NOREF(app, url) app.route<crow::black_magic::get_parameter_tag(url)>(url).websocket<std::remove_reference_t<decltype(app)>>(&app)
(sofern du mind. C++14 verwendest, bei C++11
std::remove_reference<decltype(app)>::type
)Edit: Eigentlich sollte das Makro auch besser als Template-Funktion umgesetzt sein.
-
@Th69 sagte in MAKRO Problem::
Ich denke, es liegt an der Referenz (von crow::SimpleApp& backend) bei decltype(app).
Guten Morgen ,
Hammer vielen Dank , genau das war es:) Wenn ich Zeit finde, würde ich das gern verstehen was da passiert. Aber Top
Ich Danke dir;)
Und danke Leon:)