@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.