Address of overloaded functions
Artur Skawina
art.08.09 at gmail.com
Wed Jul 3 09:07:07 PDT 2013
On 07/03/13 17:43, H. S. Teoh wrote:
> On Wed, Jul 03, 2013 at 05:41:25PM +0200, Artur Skawina wrote:
>> On 07/03/13 17:27, H. S. Teoh wrote:
>>> On Wed, Jul 03, 2013 at 05:15:48PM +0200, John Colvin wrote:
>>>> On Wednesday, 3 July 2013 at 15:03:46 UTC, Artur Skawina wrote:
>>>>> On 07/03/13 16:52, John Colvin wrote:
>>>>>> Is there any way to take the address of any of an overloaded set
>>>>>> of functions?
>>>>>>
>>>>>> import std.stdio;
>>>>>>
>>>>>> void foo(int a){ writeln("overload int"); }
>>>>>> void foo(long b){ writeln("overload long"); }
>>>>>>
>>>>>> void main()
>>>>>> {
>>>>>> auto b = &foo; //ambiguous => error
>>>>>> b(2); //valid for either overload
>>>>>> }
>>>>>
>>>>> void function(long) b = &foo;
>>>>>
>>>>> artur
>>>>
>>>> Thanks, that works
>>>
>>> This is interesting. How does C++ handle this? (Or does it?)
>>
>> The same - the context determines which overload is chosen, and
>> ambiguity is an error.
>
> Oh, so it tells the difference by whether you write
>
> void (*p)(int) = foo;
>
> or
>
> void (*p)(long) = foo;
>
> ?
Yep. Things like
void c(void (*fp)(long), long a) { fp(a); }
c(foo, 2);
work as expected too.
> I guess that makes sense.
The context dependence isn't ideal, but what's the alternative?...
artur
More information about the Digitalmars-d-learn
mailing list