Comparing function pointers
Mike Parker via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 12 00:08:49 PST 2015
On 2/12/2015 3:40 AM, Freddy wrote:
> ----
> import std.stdio;
>
> auto test1(){
> void testFunc(){
> }
> return &testFunc;
> }
>
> auto test2(){
> uint a;
> void testFunc(){
> a=1;
> }
> return &testFunc;
> }
>
> void main(){
> writeln(test1()==test1());//true
> writeln(test2()==test2());//false
> }
> ----
> Is the intended behavior?
Read the section of the documentation about Delegates, Function
Pointers, and Closures [1]. Neither of your pointers are actually
function pointers. They are both delegates. The second one, as ketmar
said, is a closure because it's a delegate with state. To get a function
pointer from an inner function, the inner function must be static.
Function pointers can't have state.
```
import std.stdio;
void printAnInt( int function() fptr ) {
writeln( "From function pointer: ", fptr() );
}
void printAnInt( int delegate() dg ) {
writeln( "From a delegate: ", dg() );
}
void main() {
static int foo() { return 1; }
int bar() { return 2; }
printAnInt( &foo );
printAnInt( &bar );
}
```
[1] http://dlang.org/function.html#closures
More information about the Digitalmars-d-learn
mailing list