|
제라툴입니다.
번역본을 사보셨군요 ..
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 쓰리즈가 공부하시는데 많은 도움을 드릴겁니다.
|