컴파일 타임에 선언 된 블록의 반환 유형을 결정할 수 있습니까? 컴파일러는 블록 내의 return 문을 기반으로 유형을 유추하여이를 수행합니다. 이 결과를 프로그래머가 사용할 수 있습니까? 예를 들어ObjectiveC - 컴파일 타임에 블록 반환 유형 결정
:
^{
return [NSArray array];
}
는 내가 달성하기 위해 노력하고있어 __typeof__
에 매크로와 유사하다
^NSArray*(){
return [NSArray array];
}
에 컴파일러에 의해 번역,하지만 블록 반환 형식을 반환합니다. 예를 들어 DECLARE_BLOCK(myBlock, ^{return [NSArray array];})
과 같은 매크로는 NSArray* (^myBlock)() = ^{...}
으로 확장됩니다.
이 매크로를 사용하면 C++11
에 auto
구조와 비슷한 비슷한 유연한 블록을 선언 할 수 있습니다.
세계에서 왜 이런 행동이 필요한지 궁금한 점이 있습니까? 어떤 문제를 해결하려고하는지 자세히 설명해 주시겠습니까? –
저는 여기서 컴파일러가 "블록 내의 return 문을 기반으로 유형을 추론합니다."라는 의미를 궁금해합니다. 컴파일러는 예상되는 유형을 알고 (제거하려고하는 선언에 따라) 유형이 일치하는지 확인합니다. 이것은 유형 유추와 다릅니다. –
이것은 의미가 없습니다. 만약 당신이'^ id {return @ [];}'를 가지고 있다면? 그것은'NSArray *'를 반환하지만 반환 값의 타입은'id'입니다. 컴파일러가 당신의 예제가'id'도 리턴한다고 생각하는지 확실히 확신해라. – Kevin