'Default' Object
BlitzMax Forums/BlitzMax Beginners Area/'Default' Object
| ||
Hi, I'm trying to make a function that acts like a list, but basically just can take any kind of object (type), operate on it, and output that same type of object/type without actually knowing (or caring) what kind of object/type it is. Is there any easy way to do this? Thanks, KrayzBlu Edit: That's assuming of course that whatever object/type is inputted carries the same standard fields/methods :) |
| ||
you are going to have to look into type casting which is done by: [typename] ( [objectname] ) i.e. Type TBase Field index% End Type Type TEx Extends TBase Field name$ End Type Global thing:TEx = New TEx thing.index = 1 thing.name = "bob" Print thing.index Print thing.name Increase(thing) Print thing.index Print thing.name Function Increase(_object:Object) TBase(_object).index:+ 1 End Function |
| ||
OK, but how would I get that function to return the same kind of Object/Type ? |
| ||
As far as I know you cant but you can just go: function MyFunc:Object(_object:object) end function And then type cast the result. I'm probaly wrong tho ;P |
| ||
Yeah that doesn't seem to work :/ |
| ||
mmm... Are you type casting the result? like:Type TBase Field index% End Type Type TEx Extends TBase Field name$ End Type Global thing:TEx = New TEx thing.index = 1 thing.name = "bob" Print thing.index Print thing.name thing2:TEx = TEx(Increase(thing)) Print thing2.index Print thing2.name Function Increase:Object(_object:Object) TBase(_object).index:+ 1 Return _object End Function And are you sure your type casting to the correct object? Other then that - some one else might be able to help . :S |
| ||
No, it gives me 'Unable to convert from 'Int' to Object' :/ |
| ||
Oo wired. I never got that error and I ran it in both debug and not. Output is: 1 bob 2 bob This is running in blitzmax version 1.18. |
| ||
You can't convert numerics to anything beside other numerics as numerics are no objects. You need to transfer numerics as strings, strings are objects. |
| ||
Hmm, I got it to work, but now when I try to turn it inot an object array, it dosnt seem to be returning the right thing (it returns an array of length 0) |
| ||
Aha OK I got it, thanks for your help :) |
| ||
Wait.... Nver Mind :( Slices seem to 'reset' the object array for some reason eg with: Type TBase Field index% End Type Type TEx Extends TBase Field name$ End Type Global thingarray:TEx[2] Global thing:TEx = New TEx Print Len thingarray thingarray = TEx[](Increase(thingarray)) Print Len thingarray Using this function returns 2 and 2 Function Increase:Object(_object:Object[]) Return _object End Function But using this function returns 2 and 0 Function Increase:Object(_object:Object[]) _object = _object[..4] Return _object End Function Any Ideas? Thanks.... |