일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- enumasByue
- 알고리즘
- 정렬알고리즘
- 애셋로드
- stl
- 정렬
- C++
- 약참조
- 스마트포인터
- moreeffectiveC++
- 람다
- dataasset
- unorder_map
- 강참조
- 자료구조
- 크리티컬섹션
- 선택정렬
- 언리얼가비지컬렉터
- BFS
- 데이터애셋
- UE_LOG
- UE4 커스텀로그
- 람다사용정렬
- 언리얼엔진구조체
- map
- 델리게이트
- C++최적화
- UELOG
- 프로그래머스
- UML관련
- Today
- Total
기억을 위한 기록들
함수포인터 + 함수포인터 별칭(콜백함수/고계함수) 본문
GoF에서 프로토타입 패턴을 공부하던 중 typedef 함수포인터에 거부감을 느끼고 위 링크를 참고해서 학습해 보았다
main 함수 첫줄에서
Spawner* ghostSpawner = new Spawner(spawnGhost);
스포너 생성자에 spawnGhost 함수의 주소를 넘겨준다.
이로써 SpawnCallback 포인터는 spawnGhost의 기능을 수행할수 있게 되고,
Monster* FirstGhost = ghostSpawner->spawnMonster(5,3); 에서 넘겨준 5와 3을
Monster* spawnMonster(int health,int speed) {
return spawn_(health,speed);
}
에서 받아 spawnGhost의 리턴값 return new Ghost(a,b); 을 넘겨주게 된다. a=5 , b=3
그리하여 Monster* FirstGhost에는 new Ghost(5,3); 이 들어 간셈이다.
-*2020.07.02 추가 작성
함수포인터의 개념은 간단한다. 변수가 아니라 그냥 함수를 가리키는 포인터라는 것뿐이다.
함수포인터를 이용하면 함수 이름 대신 포인터 변수를 사용해서 함수를 호출할 수 있다.
함수 이름이 아니라 포인터 변수를 사용하므로, 프로그램이 실행되는 도중에 호출할 함수를 바꾸는것이 가능하다.
반환형 (*함수포인터이름)(매개변수들); 이다.
이게 여기서는 Monster*(반환형 몬스터클래스포인트) (*SpawnCallBack(포인터이름))(int, int(매개변수들))이였다.
조금 더 쉽게 간단한 정수들로 만들어 보았다.
여기서 함수포인터에 typedef가 추가되면 뭐가 달라지는걸까?
위 상태에서 함수포인터에 typedef를 추가하니 에러나 난다.
함수포인터 별칭을 정의해주면 함수포인터를 매번 만들어 줄 필요가 없다.
'C & CPP' 카테고리의 다른 글
STL컨테이너 2가지(시퀀스 컨테이너/연관 컨테이너) (0) | 2020.08.18 |
---|---|
Iterator(반복자)의 작성 방법 3가지 (0) | 2020.08.07 |
CPP Reference 참고용 사이트 (영문) (0) | 2020.08.07 |
[C/CPP] const란? (0) | 2020.02.27 |
CPP - explicit (0) | 2020.01.26 |