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

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

11

06.10.2009, 22:26

gibt es eventuell auch andere möglichkeit?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

06.10.2009, 22:43

Zitat von »"Stazer"«

gibt es eventuell auch andere möglichkeit?


Ja, ne freie Funktion z.B.

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

13

06.10.2009, 22:47

leider geht as überhaupt nicht hmm :\

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

06.10.2009, 22:53

Zitat von »"Stazer"«

leider geht as überhaupt nicht hmm :\


Dann schau dir eben an wie luabind das löst...

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

15

06.10.2009, 23:24

ich glaub ich bin jetzt aufgeschmissen^^
in luabind steig ich auch leider nicht durch hmm :\

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

16

07.10.2009, 00:00

Und luabind selbst kannst du nicht verwenden?

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

17

07.10.2009, 00:15

nein leider nicht

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

18

07.10.2009, 01:03

Zitat von »"David_pb"«

Das wäre eine Möglichkeit. Du könntest ggf auch luabind verwenden, oder dir zumindest ansehen wie das dort gelöst wurde.


Oo... Meta-Programmierung... ganz harte Sache :)
Ich fand es ziemlich schwer durchzusteigen ;)

Ich würds einfach benutzen... und wiso solltest du das nicht können ?

19

07.10.2009, 11:01

Alternativ kann man auch luna verwenden.
Ich finde, dass man damit sehr gut arbeiten kann.

20

07.10.2009, 11:34

Ich habe das damals selbst gestrikt, da mir luabind a) auch zu umstaendlich war und b) ich etwas anderes suchte.

Fuer Objekte musst du fuer jede Methode eine freie Funktion implementieren, das Binding halt. Einfaches Beispiel eines Objekts fuer die Methode implements:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class IObject
{
  public:
    virtual ~IObject() {};
    virtual const char* classname() const ;
    virtual bool implements(const char* interface) const;;
};

int iobject_implements(lua_State* L)
{
  int argc = lua_gettop(L);
  if (argc != 2) // test number of arguments: object pointer + methode parameter

  {
    luaL_error(L,"%s","wrong number of arguments, 2 expected");
  }
  luaL_checktype(L, 1, LUA_TUSERDATA);
  void** udata = (void**)lua_touserdata(L,1);

  // type check ...


  const char* s = luaL_checkstring(L,2);
  // cast void* to correct type and call methode implements

  // push the string on the lua stack as return argument 

  lua_pushboolean(L,static_cast<IObject*>(*udata)->implements(s)); 
  // one return value

  return 1;
}

Wie du das ganze in der Runtime von Lua registriest und entsprechende Tabellen und Metatabelleneintraege setzt, ob du noch was am Verhalten des garbage collectors aendern moechtest , musst du fuer deinen konkreten Fall selbst entscheiden.

Hier wurde die Variante "light user data" benutzt, die vorwiegend mit Zeigern arbeitet, andere wie "full user data" arbeitet mit ganzen Speicherbloecken in dem das Objekt enthalten ist. (Ich pushe und poppe lieber Zeiger auf den Stack als ganze Objekte)
If it were not for laughter, there would be no Tao.

Werbeanzeige