이 포스트를 만든 목적

  • 일반화 함수자를 만들려고 템플릿을 쓰다가 막히는 부분이 있어, 기록해 두려고

이 포스트의 준비물

  • VMware Player 3.1.2 build-301548
  • Debian 5 64 bit
  • Vim
  • gcc 4.1.2

내용

다음의 예제를 보고, 왜 컴파일이 안되는지 설명할 수 있는가? 할 수 있다면 해 봐라.

설명

스스로 설명을 달아보고, 이 설명을 보는게 좋다.

  1. 함수를 변수에 할당하는 방법은, 레퍼런스(void (&rf)(void) = f)로 받거나 포인터(void (*pf)(void) = f) 방법 밖에 없다.
  2. template_functor 가 f 를 할당 받기 위해선 const Func& func 중 Func가 함수 형만 있어야 한다.
    그래야 함수를 레퍼런스로 받을수 있기 때문이다.(레퍼런스로 받는다 해도 어차피 포인터 겠지만.)

  3. 그래서 22 라인에서 함수형 만으로는 함수에 대한 포인터를 할당할 수 없다고 컴파일 에러가 뜬다.

요약 정리하면

  • 인자 추론은 f 가 무엇이냐에 따라 추론되는 것이 아닌, 템플릿 함수의 인자를 어떻게 선언 했냐에 따라 템플린 인자가 추론되는 것을 의미한다.

여담

  • 아마도 내일이 되면, 이것을 잊어 먹겠지. 애초에 기억하기 힘든것을 잊어 먹는게 정상이다.
  • 잊어 먹었다고 모른다고 속상해 할 것 없다.  왜냐하면 다시 이해하면 되는 그런 것이다.


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요