15일차 (1/2)

2024. 1. 2. 10:59Unreal 강의

함수 포인터
//이런 형식으로 사용된다.
void (*변수명)()

//초기화는 보통 이렇게 한다.
void (*Function)() = nullptr;

//변수명 없이 사용하면 함수 포인터의 자료형이다.
void(*)()

 

함수 포인터는 특정될 수 없다.

함수 포인터의 사용법은 함수의 포인터이기 때문에 이름만 다른 해당 함수처럼 사용하게 된다.

 

명시적으로 사용하는 경우는 보통 UI 등등에서 가장 많이 사용된다.

 

class Button 
{
public:
    virtual void Click() {}

public:
    int Image;
    int Color;
    int ScreenPos;
};

class MoveButton : public Button
{
public:
    void Click() override
    {
        printf_s("플레이어가 이동합니다.");
    }
};

class AttackButton : public Button
{
public:
    void Click() override
    {
        printf_s("플레이어가 공격합니다.");
    }
};

int main()
{
    {
        MoveButton MButton;
        AttackButton AButton;

        MButton.Click();
        AButton.Click();
    }
}

위와 같이 모든 버튼을 각각 클래스를 만들어서 상속받아 사용하게되면 너무 많은 클래스를 만들어야 된다.

그래서 이럴때 함수 포인터를 이용한다.

void PlayerAttack() 
{
    printf_s("플레이어가 공격합니다");
}

void PlayerMove()
{
    printf_s("플레이어가 이동합니다");
}

class Button 
{
public:
    virtual void Click() 
    {
        // 이렇게 부모 클래스에 함수 포인터를 만들고 함수만 사용하는 것을 콜백 방식이라고 한다.
        Function();
    }

public:
    void (*Function)() = nullptr;
    int Image;
    int Color;
    int ScreenPos;
};

int main()
{
    {
        Button AttButton;
        Button MoveButton;

        AttButton.Function = PlayerAttack;
        MoveButton.Function = PlayerMove;

        MoveButton.Function = PlayerAttack;

        AttButton.Click();
        MoveButton.Click();
    }
}

 

'Unreal 강의' 카테고리의 다른 글

17일차 (1/4)  (0) 2024.01.04
16일차 (1/3)  (0) 2024.01.03
14일차 (12/29)  (0) 2023.12.29
13일차 (12/28)  (0) 2023.12.28
12일차(12/27)  (0) 2023.12.27