Fórum Root.cz

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

Název: Konverzia std::functiohn na function pointer
Přispěvatel: fortran1986 21. 06. 2021, 19:00:23
Ahojte dá sa nejako skonvertovať?

Kód: [Vybrat]
using HttpCallback = std::function<void(HTTPRequest*, HTTPResponse*)>
Kód: [Vybrat]
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:

Kód: [Vybrat]
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 21. 06. 2021, 21:53:18
Kód: [Vybrat]
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 22. 06. 2021, 01:07:27
Tohle dělá překladač automaticky, když je lambda non-capturing.