D1에서는 아래와 같은 C스타일 함수포인터 선언이 가능했다.
D2부터는 C스타일의 함수 포인터 선언이 불가능해지고 D스타일 함수 포인터만을 사용해야 한다. (D2에서 typedef가 폐기된 영향으로 추측된다) 선언 형식은 다음과 같다.
alias [반환형] function ([매개변수 목록]) [이름];
대리자 포인터의 경우 function 대신 delegate를 사용하면 된다. 선언한 함수 포인터 변수에는 일반적인 함수의 주소, 또는 함수 리터럴을 대입할 수 있다. 함수 포인터 변수에 대리자 리터럴을 담을 수는 없다.
typedef int (*functionName) (int a, int b);
D2부터는 C스타일의 함수 포인터 선언이 불가능해지고 D스타일 함수 포인터만을 사용해야 한다. (D2에서 typedef가 폐기된 영향으로 추측된다) 선언 형식은 다음과 같다.
alias [반환형] function ([매개변수 목록]) [이름];
대리자 포인터의 경우 function 대신 delegate를 사용하면 된다. 선언한 함수 포인터 변수에는 일반적인 함수의 주소, 또는 함수 리터럴을 대입할 수 있다. 함수 포인터 변수에 대리자 리터럴을 담을 수는 없다.
alias int function(string b) func;
int foo(string b)
{
writeln(b);
return 0;
}
void main()
{
func f;
f = &foo;
f("hello D!");
f = function(string b)
{
writeln(b);
return 1;
};
f("hello D!");
}