Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fortran1986 kdy 21. 06. 2021, 19:00:23

Název: Konverzia std::functiohn na function pointer
Přispěvatel: fortran1986 kdy 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));
Název: Re:Konverzia std::functiohn na function pointer
Přispěvatel: olok kdy 21. 06. 2021, 21:53:18
void registerRoutes()
{
    auto httpCallback = [](HTTPRequest* request, HTTPResponse* response) -> void {

    };

    server->registerNode(new ResourceNode("/", "GET", httpCallback));
Název: Re:Konverzia std::functiohn na function pointer
Přispěvatel: Idris kdy 22. 06. 2021, 01:07:27
Tohle dělá překladač automaticky, když je lambda non-capturing.