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 &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;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 &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.