[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: cpp to lua binding question
- From: "Peter Shook" <pshook@...>
- Date: Thu, 22 May 2003 12:44:13 -0400
It sounds like all you want to do is index a table. Here is an example in
Lua, but your classes could be implemented in C if you wish.
local function Class(methods)
methods = methods or {}
function methods:new(obj)
return setmetatable(obj or {}, {__index = methods})
end
return methods
end
local function load(self, filename)
print(self.name, 'load', filename, self)
end
local mesh = Class{ name = 'mesh', load = load }
local sound = Class{ name = 'sound', load = load }
local texture = Class{ name = 'texture', load = load }
cs = {
mesh = {},
sound = {},
texture = {},
}
cs.texture.t1 = texture:new{ t = 1 }
cs.mesh.m1 = mesh:new{ m = 1 }
cs.mesh.m2 = mesh:new{ m = 2 }
cs.sound.s1 = sound:new{ s = 1 }
cs.sound.s2 = sound:new{ s = 2 }
cs.sound.s3 = sound:new{ s = 3 }
cc = cs.texture.t1 print('cc',cc) cc:load'one'
cc = cs.mesh.m2 print('cc',cc) cc:load'two'
cc = cs.sound.s3 print('cc',cc) cc:load'three'
cc = cs.sound.s1 print('cc',cc) cc:load'four'
$ lua x.lua
cc table: 0x10045a98
texture load one table: 0x10045a98
cc table: 0x10045c18
mesh load two table: 0x10045c18
cc table: 0x10047668
sound load three table: 0x10047668
cc table: 0x100473e0
sound load four table: 0x100473e0
- Peter Shook
Moritz Mühlenthaler wrote:
Hi everyone,
im rather new to lua and i have some problems binding it to my cpp code.
The
main problem is that all my classes are loaded dynamically, so i cant
hardcode the binding to a lua table. I could register each class' methods
as soon
as it's loaded, but i'd prefer to set some kind of hook in the metatable,
which takes care of calling the right functions; I hope i can make it a
little
clearer by getting more specific.
Lets say i have a "content server" which holds a hirarchy of classes
representing the content of a little game (texture classes, mesh classes,
sounds,
ect). This "content server" has something like a "current content" to save
some
typing (i.e. cs.meshes.player01.load("mymesh.xyz") = cs.load("mymesh.xyz")
if cs.meshes.player01 is the "current content"). So the problem is that i
cant
hardcode the functions in the "cs" table, because the current content can
be
a mesh, a texture, a camera or whatever... I've read about the metatables,
and the "__call" hook, but i somehow cant override it properly. I'd be glad
if
someone could give me a hint how to set a cfunction as a "__call" hook from
c in the metatable. Perhaps you even have a completely different idea..
Thx for your time.
JiM.
_________________________________________________________________
Add photos to your messages with MSN 8. Get 2 months FREE*.
http://join.msn.com/?page=features/featuredemail