Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: fortran1986 21. 06. 2021, 19:00:23
-
Ahojte dá sa nejako skonvertovať?
using HttpCallback = std::function<void(HTTPRequest*, HTTPResponse*)>
using HttpCallbackPtr = void(*)(HTTPRequest*, HTTPResponse*)
Potreboval by som použiť lambdu na mieste kde sa dá použiť len klasická funkcia. Objavil som síce spôsob ako to skonvertovať cez std::function.target<>, ale ten by mal fungovať len so zapnutým RTTI, lenže zo zapnutým RTTI, mi zaser linker hádže chybu ako som uviedol v predchádzajúcom diskusnom threade: https://forum.root.cz/index.php?topic=24918.0 (https://forum.root.cz/index.php?topic=24918.0)
Takže by som potreboval buď rozbehnúť kompiláciu s RTTI, alebo nájsť iný spôsob ako skonvertovať std::function
Tuná je úrivok kódu:
using HttpCallbackPtr = void(*)(HTTPRequest*, HTTPResponse*);
using HttpCallback = std::function<void(HTTPRequest*, HTTPResponse*)>;
void registerRoutes()
{
HttpCallback httpCallback = [](HTTPRequest* request, HTTPResponse* response) -> void {
};
auto callbackPtr = httpCallback.target<HttpCallbackPtr>();
server->registerNode(new ResourceNode("/", "GET", *callbackPtr));
-
void registerRoutes()
{
auto httpCallback = [](HTTPRequest* request, HTTPResponse* response) -> void {
};
server->registerNode(new ResourceNode("/", "GET", httpCallback));
-
Tohle dělá překladač automaticky, když je lambda non-capturing.