Re: Casting to derived type
hymedia <[email protected]>
| Newsgroups | gmane.comp.lang.lua.bind.user |
|---|---|
| Message-ID | <002f01c9c535$07792c10$166b8430$@ca> |
Marcus solution might work but will propagate Lua in your code and increase
compile time seriously... however, his solution was inspiring:
class LuaBind
{
public:
...SNIP
static object GetObjectByName(Name &in_name, const e_TypeId
&in_id);
static lua_State *m_Lua;
};
object LuaBind::GetObjectByName(Name &in_name, const e_TypeId &in_id)
{
Object *l_object = Manager::GetObjectByName(in_name, in_id);
switch (in_id)
{
case AX6_TYPEID_ACTOR: return object(m_Lua,
(Actor*) l_object);
case AX6_TYPEID_CAMERA: return object(m_Lua,
(Camera*) l_object);
}
return object();
}
def("GetObjectByName", &LuaBind::GetObjectByName)
local l_camera = GetObjectByName(Name("Camera"), TYPEID_CAMERA);
simple, but works for me!
Thx again
-----Original Message-----
From: Tony Kostanjsek [mailto:[email protected]]
Sent: Friday, April 24, 2009 1:19 PM
To: [email protected]
Subject: Re: [luabind] Member pointers in 0.8.1
I'd be interested in a solution for this as well. What we did as a
workaorund was to add cast functions to the lua bindings for the derived
classes, so you have to know that (in Lua) you receive a Object* and then
convert like this: local actor = Actor.cast(myobject).
It does feel wrong to introduce casts like this to a dynamic language, but
at least it works. Ultimately, we rewrote part of our project specifically
because of these problems and reimplemented some of the classes in pure lua.
I really wish luabind was more intelligent and forgiving when it comes to
(smart)pointer casts and general usage.
Best,
Tony
----- Ursprüngliche Mail ----
Von: hymedia <[email protected]>
An: [email protected]
Gesendet: Freitag, den 24. April 2009, 19:04:53 Uhr
Betreff: Re: [luabind] Member pointers in 0.8.1
Greetings,
This might be a no can do but you wizards out there might have an hocus
pocus workarounds...
Let say the basic function is define like this:
.def("GetObject", (Object*(Manager::*)(Name &)) &Manager::GetObjectByName)
All good, the Manger return an Object, but many classes derived from Object
in my C++ and my Luabind Modules follow the same structure. In c++ you can
statically cast to the desired type... Is there a way to static cast a
Luabind return value within a Lua script?
Something like:
local l_camera = (Camera*) Manager:GetObject(Name("Camera"));
This would work But it is not really sexy...
.def("GetActor", (Actor*(Manager::*)(Name &)) &Manager::GetObjectByName)
.def("GetCamera", (Camera*(Manager::*)(Name &)) &Manager::GetObjectByName)
thx
-----Original Message-----
From: Ilia Trendafilov [mailto:[email protected]]
Sent: Tuesday, April 14, 2009 3:07 PM
To: [email protected]
Subject: Re: [luabind] Member pointers in 0.8.1
Problem solved! Thanks!
On Mon, Apr 13, 2009 at 10:16 PM, Daniel Wallin <[email protected]> wrote:
> Ilia Trendafilov wrote:
>> James Porter wrote:
>>> Your code works for me in Luabind 0.8.1 / Lua 5.1.4 / MSVC8 SP1 with no
>>> problems whatsoever. Is your version of Lua up to date, and did you
>>> compile Luabind via bjam?
>
> Really? That's weird. It fails for me on GCC 4.3.2 as well.
>
>> Since you can run the code, it seems that I'm doing something wrong,
>> but I don't have a clue what it might be. Not sure if that's relevant,
>> boost version is 1.37 on Windows and 1.38 on Linux, built by bjam on
>> both OSes.
>
> Can you try this patch, it should solve the problem:
> ...
> Daniel Wallin
> BoostPro Computing
> http://www.boostpro.com
----------------------------------------------------------------------------
--
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
----------------------------------------------------------------------------
--
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
----------------------------------------------------------------------------
--
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects