인프런 커뮤니티 질문&답변

kimj90703님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

함수객체론 해결을 하지 못하고 함수 포인터를 사용해야만 하는 상황이 있을까요?

해결된 질문

22.08.02 22:14 작성

·

208

0

함수 포인터와 함수 객체에 대해서 강의를 들었습니다.
강사님께서 함수 포인터에겐 진행상황을 저장할수 없다는 단점이 있어,
클래스를 이용해 함수 객체를 이용하면 단점이 보완가능하다고 설명해주시고, 함수 객체 또한 매게 변수로 사용이 가능한걸로 아는데,
그렇다면 함수포인터는 함수 객체로 대체해서 쓰면 가능하지 않나요?
아니라면 함수 객체로만 해결이 가능한 그런 상황이 있을까요?

답변 2

0

kimj90703님의 프로필 이미지
kimj90703
질문자

2022. 08. 03. 20:42

함수포인터#1 강의에서  함수 포인터의 사용 예시로, 

"함수에서 매게변수로 또 다른 함수를 받고싶을때 함수 포인터를 쓴다"고 강사님이 설명을 해주셨고

그 다음 함수 객체 관련 강의에서 하시는 설명을 들어보니, "함수포인터는 진행상황을 저장하지 못한다는 단점이 있고 그것을 보완한것이 함수 객체이다" 라고 설명해주셨는데요,

그래서 제가 이해하기로는 '함수객체는 함수포인터의 단점을 보완한거구나' 라고 이해하고,

"그렇다면 함수포인터를 사용해야할 이유가 없지 않을까?" 라는 의문이 들어서 질문을 드렸습니다.

만약 둘의 사용 용도가 완전히 다르고, 제가 잘못 이해했다면,  잘못 이해한 부분을 지적해주시면 감사하겠습니다

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2022. 08. 03. 22:49

함수객체가 함수+데이터 저장이니 어떻게 보면 상위호환이라
함수 포인터로 할 수 있는건 물론 함수 객체로도 다 할 수 있습니다.
하지만 전달할 값이 없다면 굳이 객체까지 않고
주소값에 불과한 함수 포인터를 사용하면 되겠죠.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2022. 08. 03. 00:24

그렇다면 함수포인터는 함수 객체로 대체해서 쓰면 가능하지 않나요?

이 부분이 잘 이해가 가지 않았습니다.
함수 객체를 이용하면 함수 포인터 외에도 인자들을 같이 멤버 변수로 저장해서 넘길 수 있습니다.
서버 시간에 배울 Job이 그런 개념이기도 하고,
사실 lambda 또한 일종의 함수 객체를 만드는 작업입니다.