well who says you cant overload a method in BMAX. maybe this is an undocumented feature, maybe not. sorry if this is already known info. i did some brief searching and didnt find anything like it in the forums.
i stumbled on this technique today while working on upgrading the Irrlicht mod. there are some definate limitations to this, but i do see some potential.
' LIMITATIONS:
' must have abstract layer type
' cant call Super instance of same method directly
' can only have one overload per method
Framework BRL.Basic
Type base
Method A:Int(param1:Float,param2:Int)
Print param1
Return param2
EndMethod
Method B:String()
Return "base B"
EndMethod
EndType
' abstract layer to facilitate overload
Type base_overload Extends base
' abstract overload of method A
' NOTE: completely different params both count and type and also return type is different
Method A:String(param1:String,param2:Float,param3:Int) Abstract
' wrapper of the super A so we can still call it
' NOTE: other super methods that are not overridden with abstract will not need a wrapper
' and can be called in extended types with regular "super" syntax
Method Super_A:Int(param1:Float,param2:Int)
Return Super.A(param1,param2)
EndMethod
EndType
Type MyType Extends base_overload
' implementation of the abstract overload
Method A:String(param1:String,param2:Float,param3:Int)
' call to non-overloaded super method
Print Super.B()
' call the original A()
param2:+Super_A(param2,param3)
Return "RETURN:"+param1+" | "+param2+" | "+param3
EndMethod
EndType
Local test_base:base=New base
Local test_overload:MyType=New MyType
Print "RETURN:"+test_base.A(11,8)
Print test_overload.A("now for something completely different",1,2.1)
have fun :)
|