함수 포인터

😎·2022년 12월 18일
0

CPP

목록 보기
20/46

상황

함수 포인터를 사용했다... 후덜덜... 요구지에 멤버 함수에 포인터를 사용하라는 이야기가 있었다..!

이것 저것 검색해보고 사용 방법을 알았다. 생각보다 복잡해보였고, 생각보다 쓰기엔 복잡하지 않았다. 살짝 헷갈렸던 것은 배열로 여러가지 함수를 받아오는 포인터였다는 것이다.

사용법

내가 생각했을 때 신택스는 2가지만 알면 된다. 함수 포인터이기 때문에 함수 앞에 * 붙이는 것과 포인터는 주소를 가리키기 때문에 & 붙이는 것

함수 포인터의 함수 이름 앞에 클래스 선언 및 애스터리스크(*) 붙이기

Harl::*function

포인터가 가르킬 함수 이름 앞에 앤퍼센트(&) 및 클래스 선언

&Harl::debug,

전체 코드

void Harl::complain(std::string level) {
	...

  void (Harl::*function[4])(void) = {
      &Harl::debug,
      &Harl::info,
      &Harl::warning,
      &Harl::error,
  };
  
	...
}

TIP

멤버 함수를 함수 포인터에 사용할 때 알아야될 사항은 다음과 같다.

1. 일반함수 포인터에 멤버함수의 주소를 담을 수 없다.

2. 일반 함수 포인터에 static 멤버함수의 주소를 담을 수 있다.


생각

음... 함수 포인터를 사용하는게 좋을까 라는 생각을 한다. 찾아보니 다음과 같은 장단점이 공통적으로 얘기된다.

장점 : 유연성
단점 : 가독성 떨어짐, 디버깅 어려워짐

흠... 앞으로 개발을 하면서 더 생각해봐야겠다...
https://hwan-shell.tistory.com/87
https://kldp.org/node/104844


참고 자료

profile
jaekim

0개의 댓글