2011-08-29 6 views
-2

가능한 중복 오버로드를 지원하지 않습니다 않습니다 : 내 질문에 대한 답을 가지고 this 링크를 통해가는
Why Objective-C doesn't support method overloading?왜 목표 C가

. 그러나 나는 옳은 사람이 말하려고하는 것을 이해할 수 없었다. 누군가가 설명을 단순화하고 제공 할 수 있다면 정말 대단한 일이 될 것입니다.

감사합니다,
Nitish

+3

주석 기능을 사용하고 해당 스레드에서 "올바른 사람"에게 접근 할 수 있을까요? – Thilo

+1

아마도 당신 말이 맞을 것입니다. 하지만 어쩌면 당신은 설명을 해줄 수 있습니다 :) – Nitish

+2

Chuck은 - 그는 "2 시간 전에 마지막으로 보았습니다". – BoltClock

답변

1

C++에서 컴파일러는 형식 정보를 가지며 형식을 기반으로 여러 메서드 중에서 선택할 수 있습니다. Objective C에서 동일한 작업을 수행하려면 컴파일러가 언어의 동적 인 특성으로 인해 객체 유형에 대해 거의 알지 못하므로 (즉, 모든 객체의 유형이 id) 런타임에 완료해야합니다. 이것이 가능할 수도 있지만 실제로는 매우 비효율적입니다.

1

나는 그것이 역사적 유물 생각합니다. Objective-C는 C 및 스몰 토크에서 파생되었으며 두 가지 모두 오버로드를 지원하지 않습니다.

오버로드를 원하면 Objective-C++를 대신 사용할 수 있습니다. 소스를 ".m"대신 ".mm"확장자로 지정하십시오.

C++과 Objective-C 숙어를 섞으면 무엇을하는지 조심하십시오. 예를 들어, Objective-C 예외 및 C++ 예외는 완전히 다른 두 동물이며 상호 교환 할 수 없습니다.

+0

나는 네가하는 말을 이해할 것 같아. 전에 Box2D에서 IPhone 게임 개발을 할 때 .mm 확장자를 사용했습니다. – Nitish

1

그가 말하려는 것은 동적 유형 지정 언어에서 메소드의 오버로드가 불가능하다는 것입니다. 동적 유형 지정 언어에서는 런타임까지 각 객체에 대한 정보를 알 수 없기 때문입니다. 컴파일 시간 동안 정적으로 유형이 지정되면 오버로드가 해결 될 수 있습니다. 같은 이름을 가진 동일한 함수를 만들지 만 컴파일러는 다양한 호출간에 모호성을 해결할 수있는 충분한 정보를 얻을 수 있습니다. 그러나 동적 유형 지정 언어에서는 런타임 중에 만 오브젝트가 분석되므로 다양한 호출간에 해석 할 수 없습니다.

+0

연산자 오버로딩은 불필요한 복사본과 생성자의 근원이 될 수 있습니다. 일부 컴파일러는이를 피할 수 있습니다. 동적 유형 언어에서는 가능하지 않은 이러한 최적화가 있습니다. 그것은 단지 문법적 인 것입니다. –

+0

@Kris : a) 주장 된 모든 "조작자 과부하 악용"은 쉽게 "기능 남용"으로 변형 될 수 있습니다. b) 황제 물고기의 대답에 대해 진실로 의견을 말하겠습니까? –

+0

a) 정규 구문을 사용하면 적어도 함수를 호출하고 인수를 전달하는 것을 알고 있습니다. b) 동적 인 언어 때문에 최적화가 가능하지 않다는 말로 인해 가능하지 않다는 진술을 거부하고 싶었다. –