본문 바로가기

C/C++/C/C++일반

함수 포인터

맨날 헷갈리는 함수 포인터의 사용 이렇게 정리 해본다.

 

※ 아래의 코드는 Microsoft visual studio 2010 에서 만 !! 테스트 한 코드이다. 컴파일러마다 문법이 조금씩 다르니 그점을 참고하시길

일반 함수에대한 함수포인터 형식은 다음과 같다.


선언 : 반환값형식 (*함수명)(매개변수)




일반 함수 선언, 대입, 호출은 그럭 저럭 알만하다. 그런데 함수가 클래스 맴버 함수라면 형식과 사용법이 조금 틀려진다. 처음에 이문법을 봤을 때 이게 먼가 했다.


선언 : 반환값형식 (*클래스명::함수명)(매개변수)



멤버 함수포인터의 호출은 해당 클래스의 인스턴스가 있어야지 만 가능하다. 그래서 위의 경우에는 "this->*" 이나 "fc.*" 를 통해서 함수포인터를 호출한다. 인스턴스가 포이터일 경우에는 ->* 아닐경우에는 .* 을 사용한다.


위 예제에서 눈여겨 보아야 할 사항은 멤버함수 포인터의 배열과 매개변수 그리고 타입지정이다. 


물론 이밖에도 함수포인터의 동적활당, 반한 등등. 함수포인터의 문법적 요소는 인터넷을 찾아보면 줄줄 나온다.


내 생각에는 멤버 함수 포인터는 보통 프로젝트의 기능개발 위주의 개발보다는 프레임워크 개발에 좀더 유용한 것같다.


멤버함수 포인터 배열의 같은 경우는 이벤트 헨들러의 핵심 개념이다.


생각 해보건데 함수 포인터 관련 기법은 코드의 관리적 측면 때문에 사용되는 것이 아닌가 쉽다.


내 생각에는 여러사람이 같이 보는 코드에는 코드의 난해함과 가독성을 떨어 뜨리기 때문에 좀 미추이고 핵심 모듈등의 코드에 사용하면 코드의 유지관리 및 기능 확장에 유용할 것 같다.