From: <gle...@gm...> - 2009-06-09 08:14:33
|
Yesterday doing some tests with one framework that I'm programming I had some troubles with classes and their instances. They're having an strange behaviour treating instance class/local variables as static ones... . I don't understand why It's working in that way. Maybe I would go to swig forums because it's a behaviour derived of swig wrapping? Imagine the next situation: class timer : public plugin { int starttime; void start(void) { starttime = getTick(); } int getMs(void) { return getTick() - starttime; } } class effect : public plugin { void render(plugin *timer) { timer.exec("start"); } } exec(char *f) is a function which takes the name of a function and executes it. Inherited by plugin class. test1.lua: require('timer'); a=timer.timer(); a:start(); b=timer.timer(); while (escaped not pressed) do b.start(); end print(a.getMs()); print(b.getMs()); expected & returned: a the miliseconds counted until escape was pressed. b aproximately 0. test2.lua require('effect') require('timer'); f=effect.effect(); a=timer.timer(); a:start(); b=timer.timer(); while(escaped not pressed) do f:render(b); end print(a.getMs()); print(b.getMs()); expected: a the miliseconds counted until escape was pressed. b aproximately 0. returned: a aproximately 0. b aproximately 0. I found that in the first case the starttime memory places of a and b are different. In the second case a and b have starttime in the same memory place. This info was taken inside de render function, if a do a function to print the pointer of the same class, the pointer is well retrieved. (ex.: a:getpluginpointer() GOOD, f.render(a) and inside call a:getpluginpointer(), a and b return the same plugin pointer) 'a': pointer: 0x1141d0 'b': pointer: 0x1141d0 Why? :\ Thanks in advance. Gorka Lertxundi Osa |