완벽 전달2 완벽전달이 실패하는 경우들 2 중복적재된 함수 이름과 템플릿 이름 1편에서의 함수 f와 마찬가지로 fwd를 거쳐 인수를 전달하려는 대상 함수의 행동 방식을 커스텀 하기위해 f가 하나의 함수를 받아서 그 함수를 호출한다고 하자. 그함수가 int를 받고 int를 돌려준다고 하자 void f(int (*pf)(int));// pf는 processing function void f(int pf(int));// 더 간단한 비 포인터 구문 여기에 중복 적재된 processVal 함수가 있다고 하자 int processVal(int value); int processVal(int value, int priority); f(processVal);// 가능하다 f는 함수 포인터를 기대하지만 processVal은 함수 포인터가 아니다. 함수또한 아니다.. 2020. 7. 30. 완벽 전달이 실패하는 경우들 1 우선 완벽 전달에 대해 알아보도록 하자 전달(forwarding)이란 말 그대로 한 함수가 자신의 인수들을 다른 함수에 넘겨주는(전달하는) 것을 뜻한다. 이때 목표는 전달받는 함수가 애초에 전달하는 함수가 받았던 것과 동일한 객체들을 받게 하는 것이다. 하지만 값 전달 방식의 매개변수로는 불가능하다. 매개변수는 원래 호출자가 넘겨준 인수의 복사본이기 때문이다. 그래서 범용적인 전달을 위해 참조 매개변수들을 사용해야 한다. 완벽 전달은 단순히 객체들을 전달하는 것 뿐만 아니라 그 객체의 특징과 형식(왼값/오른값 여부, const/volatile 여부)도 전달하는 것을 말한다. f라는 함수에 인수를 전달하는 함수를 만들어 보자. 전달 함수는 임의의 형식과 개수의 인수들을 받는 템플릿 이어야 하기 때문에 가변.. 2020. 7. 29. 이전 1 다음