IRC Logs for #zfx


2022-11-25

08:16:29 Schrompf joined the channel
08:48:28 xq: moin Schrompf
08:58:35 Schrompf: moinlich
19:23:21 Schrompf joined the channel
22:07:39 Hannes joined the channel
22:08:07 Hannes: HiHoHopsasa
22:17:11 Hannes: Wie lernt man C++ Template Magic? Ich kann zwar die STL benutzen und für leicht eine Liste bauen die beliebige Datentypen enthält, aber bei, zum Beispiel einem automatisierten Bindigsystem für Lua, sehe ich null wie man da hinkommt
22:28:47 Schrompf: ei, da hast du dir was ausgesucht
22:29:19 Schrompf: template ist wie ein steuerformular: du schreibst code und lässt freistellen, wo man dann template-parameter eintragen kann
22:29:27 Hannes: ist das wirklich kompliziert oder denk ich das nur weil ichs bisher nicht gelernt hab?
22:29:32 Schrompf: letzteres
22:29:37 Schrompf: es ist eigentlich simpel
22:29:57 Schrompf: du kannst es dir echt simpel vorstellen wie ein suchen&ersetzen, was der compiler für dich tut
22:30:26 Schrompf: im falle von lua fängst du an mit nem einfachen template einer funktion mit einem parameter
22:30:52 Schrompf: die funktion mappt den einen parameter aus lua und ruft dann deine funktion auf.
22:31:15 Schrompf: und du schreibst die registrierung, wo du einen funktionszeiger einer funktion mit halt einem param übergibst
22:31:37 Schrompf: template
22:32:10 Schrompf: void registerFunctionAtLua( void (*func)(FuncParam&));
22:32:35 Schrompf: wenn Du das jetzt mit einer Funktion aufrufst, die zum Beispiel einen int nimmt
22:32:44 Schrompf: void ExampleFunction(int a);
22:32:48 Schrompf: also so:
22:32:57 Schrompf: registerFunctionAtLua(&ExampleFunction);
22:33:28 Schrompf: dann ersetzt der Compiler überall einen int ein, wo Du oben den Template-Param FuncParam geschrieben hast
22:33:49 Schrompf: und so kannst Du Code schreiben, der mit dem Param was macht
22:36:31 Hannes: hm
22:37:10 Hannes: wo steht der code um int a auf den luastack zu pushen?
22:38:09 Schrompf: in ner funktion, die du generieren und schreiben musst. die kommt oben im beispiel nicht vor, aber du würdest eine erfinden und in registerFunctionAtLua() mit nem int instanziieren und bei Lua anmelden
22:38:35 Schrompf: so nach dem Motto: ich rufe registerFunctionAtLua() mit nem FuncPointer auf ne func(int) auf
22:38:53 Hannes: ok
22:39:25 Schrompf: und die funktion instanziiert dann machFunc(int), und in machFunc(int) machst du dann pushParam(dat_int) und dann call
22:39:41 Schrompf: wobei... willst du deine c-funktionen bei lua anmelden?
22:39:47 Schrompf: oder willst du lua-funktionen aus c aufrufen?
22:40:09 Schrompf: also für templates macht's keinen unterschied, aber ich merke gerade, ich dachte die ganze zeit, du willst deine c-funktionen bei lua bekannt machen
22:40:14 Schrompf: und du meinst anscheinend die gegenrichtung
22:41:32 Hannes: c-funktion in lua aufrufen ist schon richtig
22:42:32 Schrompf: nuja, dann go
22:42:48 Schrompf: mach erstmal ne einfache funktion mit hardcoded parameter
22:43:02 Schrompf: dann template das ding und mach den paramtyp der funktion flexibel
22:43:13 Schrompf: da wirst du schon ein bissl was über forwarding und so lernen
22:43:23 Schrompf: und template type deduction
22:43:40 Schrompf: und wenn das ding stabil mit einem parameter funktioniert
22:44:04 Schrompf: dann machst du a) rückgabe-typen und/oder b) mehrere parameter mit C++11-variadic template params
22:44:42 Schrompf: vor C++11 hat man dann ne version mit zwei params copypasted, und dann eine mit drei, und irgendwo da hat man sich dann geschworen, nur funktionen mit max. 3 params bei lua zu nutzen
22:45:00 Schrompf: (um dann zwei wochen vor release ne fix ne vier-params- und ne fünf-params-version hinzuklatschen)
22:46:03 Schrompf: ich kriech ins bett. viel erfolg, Hannes! cool, dass du sowas versuchst. lass dich nicht entmutigen
22:54:46 Hannes: gn8