Peter Vreman wrote:
At 22:45 1-7-2005, you wrote:
function MyOverloadedFunc:boolean; alias MyOverLoadedFuncNoParams;
function MyOverloadedFunc(i:integer):boolean; alias MyOverLoadedFuncInt;


You can already do this, only with some extra typing:

function MyOverloadedFunc:boolean; public name 'MyOverLoadedFuncNoParams';
function MyOverloadedFunc(i:integer):boolean; public name 'MyOverLoadedFuncInt';

function MyOverLoadedFuncNoParams:boolean; external name 'MyOverLoadedFuncNoParams'; function MyOverLoadedFuncInt(i:integer):boolean; external name 'MyOverLoadedFuncInt';

This trick indeed works :)


Considering again why Marcel Martin actually asked for a feature to distinguish 
overloaded functions, maybe the aliases have limited use.

The function ICmp is mostly used in the context of passing it to sort functions 
or perhaps a container like a redblack tree or a heap (which need to know how 
to sort the items they store). In all these cases, it might be required to 
identify which ICmp function to use. A syntaxis like @ICmp:integer:integer or 
@ICmp(integer,integer) is more typing that ICmpII or some other short 'alias'. 
The only difference is that for ICmpII one needs to explictly declare the alias 
(using the trick you mentioned).

If ICmp was also called directly many times, then having the short form 
ICmp(myvar,myothervar) is easier to use than ICmpII(myvar,myothervar). In this 
case, the alias is useful.

A larger improvement would be reached by examining the context where the @ICmp 
is assigned to, e.g. the parameter type of the function you are passing @ICmp 
to, or perhaps the type of MyCmpProc in MyCmpProc:[EMAIL PROTECTED] This 
however can be ambiguous in case the you are passing @ICmp to an overloaded 
function (as I mentioned shortly before). In that case the programmer might 
need to explicitly identify which overloaded function of ICmp to pass. Anyway, 
the feature of  deriving the meaning of @ICmp from the context could save more 
typing and ease changing the type of variables more than when using only 
aliases (using the public name/external name trick or a new feature).

However, the 'context' feature sounds like 'not easy to implement' and 
'dangerous because of unclear side effects' to me. So what is 'possible', as 
Marcel Martin said: When I ask 'would it be possible', I mean 'would it be 
possible
without having to rewite all the compiler'?

Personally I think maybe other features have more priority at the moment - I 
hope to see generics one day (these definitely help a lot in the area of 
type-safe containers) - but of course that is up to the developers to decide :)

Regards,

Bram

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to