2016-07-11 8 views
1

Derzeit experimentiere ich mit der Luabind-Library und stolperte über die Aufrufsyntax. Es verhält sich und funktioniert wie erwartet, aber irgendwie kann ich nicht verstehen warum oder wie es funktioniert.
Der Code in Frage folgt:Luabind-artige Syntax (Indexoperator)

Class Animation 
{ 
    std::vector frames; 
public: 
    Animation(){} 
    ~Animation(){} 
    addFrame(const Texture2D *in_image); 
}; 

//Somewhere else 
luabind::module(LuaState) 
[ 
luabind::class_("Animation") // < "Animation" how we want to name the Class in the Lua runtime 
.def(luabind::constructor<>())    // < Binds the empty constructor 
.def("addFrame", &Animation::addFrame)  // < Binds the &Animation::addFrame method to lua with the name "addFrame" 
]; 

Um genauer zu sein, ich verstehe nicht, was in den eckigen Klammern passiert. Warum funktioniert das? Ich habe versucht, den Quellcode von Luabind zu lesen, leider ohne Erfolg. Ich habe auch versucht, dieses Verhalten, das ebenfalls nicht erfolgreich war, zu rekonstruieren.
Also, fehlt mir etwas sehr offensichtlich?

Vielen Dank im Voraus!

Antwort

1
  • luabind::module ist eine Funktion, und es kehrt Typen luabind::module_, die einen überladenen [] Operator ein Argument des Typs luabind::scope nehmen hat.
  • luabind::class_ ist eine Klasse, und es hat einen Konstruktor, const char* und eine Elementfunktion def nimmt eingeben, kehrt class_& so ruft def verkettet werden können.
  • luabind::class_ wird aus einer Klasse abgeleitet luabind::detail::class_base genannt, die sich von luabind::scope abgeleitet wird, so kehrte die endgültige class_ kann als Argument an luabind::module_::operator[] zu scope und weitergegeben umgewandelt werden.
+0

Vielen Dank, genau das, was ich brauchte! – ChibiX