Function overloading question

Kirk McDonald kirklin.mcdonald at gmail.com
Sun Aug 26 12:07:02 PDT 2007


Márcio Faustino wrote:
> Daniel Keep wrote:
> 
>> I can't think why.  I mean, you've put a specific kind of pointer into a
>> void* (that's perfectly fine).  Because f is overloaded, and you haven't
>> specified which overload you want, I believe it will take the first one,
>> lexically speaking.
>>
>> You've then gone and brute-force cast the pointer to another type.  The
>> moment you involve cast, you're taking on responsibility for not doing
>> anything stupid.
>>
>> Doing things like getting a pointer to an overloaded function is a bit
>> of a wart at the moment.  Hopefully, polysemous values will help.
>>
>>     -- Daniel
> 
> 
> Thanks for the answer. I wasn't actually coding anything like that, it's 
> just that I was wondering how to take the address of an overloaded 
> function.

void foo(int) {}
void foo(double) {}

There are two ways:

void function(int) fn1 = &foo;
void function(double) fn2 = &foo;

These will each get the proper overloads. Alternately:

auto fn3 = cast(void function(int)) &foo;
auto fn4 = cast(void function(double)) &foo;

This will also work.

-- 
Kirk McDonald
http://kirkmcdonald.blogspot.com
Pyd: Connecting D and Python
http://pyd.dsource.org


More information about the Digitalmars-d-learn mailing list