Can I pass a function by parameter?
AsmMan via Digitalmars-d
digitalmars-d at puremagic.com
Sun Sep 7 20:01:40 PDT 2014
On Sunday, 7 September 2014 at 21:42:31 UTC, Jakob Ovrum wrote:
> On Sunday, 7 September 2014 at 21:31:11 UTC, AsmMan wrote:
>> Thank you too. Btw, why the & operator in this syntax? I used
>> to think ref keyword sort of C's T** and & operator is
>> neeeded.. or is it because f can be a function called without
>> pass any parameter?
>
> In D, the address-of operator has to be used to get a function
> pointer or delegate from a function or member function. This is
> unlike C and C++, where the function is implicitly convertible
> to its function-pointer type.
>
> This difference in rules may be because D has functions that
> can be called without parentheses:
>
> ---
> int foo() { return 42; }
>
> // Note: `bar` is an overload set.
> void bar(void function() a) {}
> void bar(int a) {}
>
> void main()
> {
> assert(foo() == 42);
>
> // Nullary functions can also be called without parentheses.
> assert(foo == 42);
>
> bar(foo); // If function pointers worked like in C, which
> overload should be called?
> }
> ---
I got it. Why it doesn't works if foo is a method?
More information about the Digitalmars-d
mailing list