언어/C++

함수 포인터! (Function Pointer)!

개발서 작성 2021. 7. 13. 12:24
반응형

 

 

 

함수 포인터 는?

함수 포인터 는 함수에 포인터를 달아서 다른 함수들을 교체해가면서 사용할 수 있는 방법이다.

 

 그럼 어디 쓰이냐? 

간단하게 생각하면 스킬 변경이나 같은 값으로 다른 효과를 내고 싶을때 사용한다.

 

사용

{

 선언은 함수와 비슷해 [ 자료형 (* 함수명)(매개변수) ]처럼 사용한다.

 

	void (*Point_func)();
	void (*Point_func_mg)(int &a ,int &b);

 

void pointFuncTest1() {	printf("1번작동");}

 void pointFuncTest2() { printf("2번작동");}
    
    C->Point_func = pointFuncTest1;
	C->Point_func();
	C->Point_func = pointFuncTest2;
	C->Point_func();

	B->Point_func_mg = swap_reference;
	B->Point_func_mg(x, y); // x =10, y=5
	printf("\n\n\n%d , %d", x, y);

}

처럼 사용한다.

 

결과를 한번보자

{

 

 

 

}

 

처럼 작동한다.

 

또 함수포인터 를 매개변수로 받아 줄수 있는 방법도있다.

 

//선언
D3DXVECTOR3(*Shootting)(Ani_spriteActor _Bullet, D3DXVECTOR3 _BulletPos,int _speed);
void SETBulletTiype(  D3DXVECTOR3(_Funce(Ani_spriteActor _Bullet, D3DXVECTOR3 _BulletPos, int _speed))=Shutting_Under);
inline static D3DXVECTOR3 Shutting_Under(Ani_spriteActor _Bullet, D3DXVECTOR3 _BulletPos, int _speed);


//함수를 넣어주는 함수
void BulletBase::SETBulletTiype( D3DXVECTOR3(_Funce(Ani_spriteActor _Bullet, D3DXVECTOR3 _BulletPos, int _speed)))
{
      this->Shootting = _Funce;
}

넣어주는방법
this->SETBulletTiype(Shutting_Under);