D언어에서의 함수 포인터

D1에서는 아래와 같은 C스타일 함수포인터 선언이 가능했다.

[d]
typedef int (*functionName) (int a, int b);
[/d]

D2부터는 C스타일의 함수 포인터 선언이 불가능해지고 D스타일 함수 포인터만을 사용해야 한다. (D2에서 typedef가 폐기된 영향으로 추측된다) 선언 형식은 다음과 같다.

alias [반환형] function ([매개변수 목록]) [이름];

대리자 포인터의 경우 function 대신 delegate를 사용하면 된다. 선언한 함수 포인터 변수에는 일반적인 함수의 주소, 또는 함수 리터럴을 대입할 수 있다. 함수 포인터 변수에 대리자 리터럴을 담을 수는 없다.

[d]
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!");
}
[/d]

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.