2009-12-22 2 views
0

C++에서 델리게이트의 의미는 무엇입니까? C/C++에서 sort 함수는 비교 함수/함수를 취합니다. 마지막 매개 변수는 대리자의 형식입니까?C++의 대리자는 무엇을 의미합니까?

+0

제목의 오타 : "의미"여야합니다. –

답변

5

"위임자"는 실제로 C++ 용어의 일부는 아닙니다. C#에서는 멤버 함수를 호출 할뿐만 아니라 객체의 주소를 저장할 수있는 glorified 함수 포인터와 같은 것입니다. 작은 라이브러리 기능으로 C++에서 이와 같은 것을 작성할 수 있습니다. 또는 더 일반적인 : boost::bind<>boost::function<>과 결합하십시오.

C++에서는 "함수 개체"라는 용어를 사용합니다. 함수 객체는 함수 호출 연산자()를 통해 "호출 가능"한 모든 것 (함수 포인터 포함)입니다.

std :: sort는 인수를 수정하지 않고 부울 값을 반환하는 특수 함수 객체 인 "술어"를 사용합니다.

2

C++의 콜백 함수는 delegates의 형태로 (느슨하게) 참조 될 수 있습니다 (단, delegate이라는 용어는이 용도로 사용되지 않음). 콜백 함수는 함수 포인터를 사용하여 매개 변수로 다른 함수에 전달합니다. 그러나 C#의 대리자는 C++의 콜백 함수와 비교하여 훨씬 고급입니다.

+3

콜백 함수는 C 개념입니다. 그것이 C++에서 사용될 수는 있지만, 펑터 (함수처럼 행동하는 객체)의 개념으로 대체되었습니다. –

0

대리인 : 구독 시스템에서 다기능 포인터처럼 작동하는 개체입니다. 정말 콜백 알림 및 이벤트 처리를 위해 정적 또는 'object'멤버 함수 포인터를 사용하는 것을 단순화합니다.

This 링크는 대표자를 명쾌하게 설명하거나 MSDN 링크를 참조 할 수도 있습니다.

2

작업 위임이란 작업 부하를 다른 사람들과 공유하는 것을 의미합니다. 실생활에서, 당신이 당신의 일을 위임한다면, 즉 당신이 매니저라면, 당신은 당신이 어떻게 알지 않고도 다른 사람들이 일을 끝내기를 기대하면서 당신의 일을 공유 할 것입니다.

개념은 C++ 및 대리인 기능이있는 다른 언어에서와 동일합니다. C에서 당신은 대리인으로 이것을 볼 수 있습니다 :

int calculate(int (*func)(int c), int a, int b)

당신은 당신을 위해 몇 가지 작업을 계산합니다 다른 함수에 대한 포인터를 보낼 것으로 예상되기 때문에. 나는 최근에 Python과 C로 함수 포인터에 blog post을 썼다. 이것을 확인해 보면 도움이 될 것이다. 이것은 C 또는 C++에서 작업을 위임하는 "전통적인"방법이 아닐 수도 있지만, 다시 말하자면, 나는 조금 이상하다고 말합니다.

1

Delegation은 기능을 클래스 (pimpl, aggregation, private inheritance)에 임베드 된 기능에 전달하는 방법으로 주로 사용됩니다. 그것들은 주로 멤버 클래스의 함수를 호출하는 한 줄의 (인라인 된) 함수입니다. 내가 아는 한, C#의 대리자와 아무 관련이 없습니다.

이 점에서 qsort에 사용 된 함수 포인터는 델리 케이트가 아니며 프레임 워크 모듈을 Hollywood principle과 같이 사용자 소프트웨어로 확장 할 수있는 콜백입니다.