Possible flaw in handling of object references

Kristoffer Danielsson <[email protected]>
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <[email protected]>
Consider the C++ function below. The MyStruct and MyMember classes are both mapped into Lua.

 

struct MyMember
{
 int value;
};

 

struct MyStruct
{
 MyMember x;
};

 

void foo(MyStruct &m, const MyMember &x)
{
 m.x.value = 1;
 m.x.value += x;
}

 

Now we call the function from Lua:

local m = MyStruct()
local x = MyMember()
foo(m, x)

 

It seems correct at first, but the API is flawed. Parameter x might get altered if function is used as follows:

local m = MyStruct()
m.x = 3
foo(m, m.x)

 

Expected value of m.x: 4
Actual value of m.x: 2

 

What is the best practice to avoid this 'fake-const' problem?


I understand you can change the signature of foo to "void foo(MyStruct &m, MyMember x)", but that implies a possible performance hit, doesn't it? Is there a better way?

 

My feeling is that all bound functions should have non-reference parameters IF parameter type exists in 'this' AND is bound to lua. Correct? Is it possible that luabind could handle this automatically to avoid semantic errors?

 

Thanks
 		 	   		  
_________________________________________________________________
Klicka här!
http://new.windowslivemobile.msn.com/SE-SE/windows-live-hotmail/default.aspx

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo

_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
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.