함수 포인터 타입
함수 포인터 타입 (Function pointer types)
fn 키워드로 쓰는 함수 포인터 타입 은 컴파일 타임에 정체가 반드시 알려지지는 않는 함수를 가리켜요. 즉 값 하나로 함수를 가리켜서 그때그때 호출하는 데 쓰는 타입이에요.
출처: Rust Reference
본문
문법은 다음과 같아요.
BareFunctionType → ForLifetimes ? FunctionTypeQualifiers fn ( FunctionParametersMaybeNamedVariadic ? ) BareFunctionReturnType ?
FunctionTypeQualifiers → unsafe ? ( extern Abi ? ) ?
BareFunctionReturnType → -> TypeNoBounds
FunctionParametersMaybeNamedVariadic → MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadic
MaybeNamedFunctionParameters → MaybeNamedParam ( , MaybeNamedParam ) * , ?
MaybeNamedParam → OuterAttribute * ( ( IDENTIFIER | _ ) : ) ? Type
MaybeNamedFunctionParametersVariadic → ( MaybeNamedParam , ) * MaybeNamedParam , OuterAttribute * ...
Binop을 함수 포인터 타입으로 정의한 예시를 볼게요.
#![allow(unused)]
fn main() {
fn add(x: i32, y: i32) -> i32 {
x + y
}
let mut x = add(5,7);
type Binop = fn(i32, i32) -> i32;
let bo: Binop = add;
x = bo(5,7);
}
함수 포인터는 함수 항목(function items)과 캡처하지 않는(non-capturing), 비-async 클로저 로부터의 강제(coercion)를 통해 만들어질 수 있어요. unsafe 수식어는 그 타입의 값이 unsafe 함수임을, extern 수식어는 extern 함수임을 나타내요.
함수가 가변인자(variadic)가 되려면 그 extern ABI가 items.extern.variadic.conventions에 나열된 것 중 하나여야 해요.
함수 포인터 매개변수의 속성 (Attributes on function pointer parameters)
함수 포인터 매개변수의 속성은 일반 함수 매개변수와 같은 규칙과 제한을 따라요.