C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38676] Re:[질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...?
김윤동.제라툴 [zeratul] 859 읽음    2005-01-07 11:49
제라툴입니다.

번역본을 사보셨군요 ..

Effective STL은 굉장히 오역이 많아서 ..

우선 Effective STL 39장에서 말하는 순수 함수는 우리가 생각하는 Pure Function이 아닙니다.

Scott Meyers가 39장을 설명하기 위해서 . Pure Function에 관해 새로운 정의를 부여합니다.

Scott의 정의에 따르면
"pure function" is "a function whose return value depends only on its parameters"

즉 Parameter에 의해서만 조건을 부여하는  Predicate를 만들라는 뜻이죠 ..

그리고 위의 예제는 그것의 잘못된 점을 보여준것 입니다.

간단히 설명하면 위의 예제에서 보면 find_if Function으로 넘어가는 Predicate의 값은 Call by Reference가 아니고

Call by Value 이죠 ^ ^

즉 find_if에서 한번 검색 되고 .. return 되지만 실제로 remove_if에 있는 Predicate의 객체에는 아무런 영향을 미치지 못하죠

그런 이유에서 find_if가 return 된후에도 remove_if에 존재하는 Predicate 객체의 timesCalled  값은 그대로 0 으로 남아 있습니다.

그렇기 때문에 2번 검색 되는 것입니다.  ( remove_copy_if는 find_if를 쓰지 않고 루프를 만들어서 검색합니다. )

이 정도면 이해가 되실런지 ^ ^ 위의 예제는 조금 쉬운 예제이구요.

Predicate의 life time 문제가 얽혀서 적용 되는 것들도 많이 찾아 보실 수 있을 겁니다.

또한  Parameter Independent 하게 Predicate를 만들려면 보통은 Function 내에 Singleton 을 적용하는 예를 많이

찾아 보실수 있을 겁니다. 

조금 도움이 되셨으면 하내요 ..^ ^

From Zeratul

ps. Effective STL의 내용을 가끔 조금 난해한 것들이 있기때문에
디자인 패턴이나 C++ in Depth 쓰리즈가 공부하시는데 많은 도움을 드릴겁니다.

+ -

관련 글 리스트
38652 [질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...? 진수.네모 817 2005/01/06
38676     Re:[질문] STL에서 predicate 를 순수 함수로 만들라고 하는데...? 김윤동.제라툴 859 2005/01/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.