Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

29.07.2013, 13:34

std::bind sollte auch funktionieren.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

29.07.2013, 13:36

Wobei du überlegen kannst die Funktion komplett von der Klasse zu entkoppeln. Also als nicht statische nicht Member Funktion.
Das erlaubt dann allerdings keine Calls von privaten oder von protected Methoden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

13

29.07.2013, 14:36

@RenX313: Sorry, das war ein Missverständnis, ich dachte du verstehst Lua nicht und denkst du kannst einfach alles an lua_registerübergeben. Da hab ich mich wohl getäuscht, entschuldigung.


Wobei du überlegen kannst die Funktion komplett von der Klasse zu entkoppeln. Also als nicht statische nicht Member Funktion.

Falls eine Klasse zur Verwendung sowohl in C++ als auch in Lua gedacht ist, würde ich das sogar sehr empfehlen: Die Klasse selbst sollte dann nichts von Lua wissen und ein separates Modul (cpp-Datei, etc.) die Registrierung in Lua übernehmen (separation of concerns). Das könnte dann etwa so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
 // In MyClass_luaexport.cpp:
namespace {
int MyClass_f(lua_State* L)
{
    auto obj = static_cast<MyClass*>(luaL_checkudata(L, 1, "mylibrary.MyClass"));
    obj->f();
    return 0;
}
} // anonymous namespace

Das setzt natürlich die Verwendung von luaL_newmetatable voraus.

Das erlaubt dann allerdings keine Calls von privaten oder von protected Methoden.

Private Funktionen will man sicher nicht für Lua aufrufbar machen und protected wohl auch nicht, außer man hat vor, von Lua aus C++-Klassen "abzuleiten" was möglich aber ohne weitere Bibliotheken nicht einfach ist.

@Steef: std::bind() ist leider so ohne weiteres nicht mit einer C-API wie der von Lua verwendbar.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

29.07.2013, 15:05

Wieso soll das nicht gehen? Er übergibt doch da eine Adresse irgendeiner statischen Methode einer Klasse und übergibt den this-Pointer. Da kann er dann doch aufrufen, was er will, auch private Methoden. Und genau das geht eben mit dem Vorschlag von Schorsch nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

15

29.07.2013, 18:40

Ja natürlich geht es. Nur denke ich, dass man üblicherweise eher public als private Member scriptbar macht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

29.07.2013, 19:30

Es ging mir auch eher darum, dass dort eine komplexe Funktion von außen aufgerufen wird, die Zugriff auf private oder protected Methoden oder Member braucht. Der einfachste Fall wäre z.B. eine "print"-Methode, die den Zustand des Objekts ausgibt. Ohne die entsprechenden Zugriffe, sieht's da schlecht aus. Für Debug-Zwecke aber oft sehr sinnvoll.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige