[C++] 함수 포인터 표기를 단순화하는 방법

2022. 6. 23. 23:54♣ C++

함수 포인터를 그냥 표기하기엔 복잡했습니다.

* 이전 포스팅 - 함수 Basic

 

좀 쉽고 간편하게 표기하는 방법은 없을까요?

typedef 키워드와 auto 키워드를 활용해봅시다.

 

개발 환경 : VSCode, Windows 10

 

 

 

 

기본 개발 세팅은 다음과 같습니다.

#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
	return 0;
}

 

 

 

 

 

 

📌 typedef 키워드

 

함수 원형 선언하는 구간에서 함수 포인터를 선언하는 방식입니다.

typedef 타입(*포인터 이름)(인수 타입);

typedef double(*calculator)(double, double);

 

이렇게 될 경우, Calculator 함수 원형은 함수 포인터만 인수로 받아도 상관없습니다.

typedef double(*calculator)(double, double);
double Calculator(double, double, calculator);

 

main 함수 본문입니다. 미리 정의된 함수 포인터로 새로운 포인터를 선언합니다.

예제에선 Add 함수와 포인터를 연결시켰습니다. Calculator 함수에는 포인터를 인수로 넣었습니다.

int main()
{   
    int a = 30, b = 10;
    int pointer_result;
    calculator ptr_func = Add;
    pointer_result = Calculator(a, b, ptr_func);
    cout << "사칙 연산의 결과는 " << pointer_result << " 입니다." << endl <<endl;
}

 

다음은 함수 정의 부분입니다.

double Add(double a, double b){return a + b;}
double Calculator(double a, double b, calculator func){return func(a, b);}

지정해둔 포인터 타입의 함수를 인수로 전달하고 사용한 것을 볼 수 있습니다.

 

 

전체 코드입니다.

#include <iostream>
#include <string.h>
#include <string>
using namespace std;


double Add(double, double);

typedef double(*calculator)(double, double);
double Calculator(double, double, calculator);

int main()
{   
    int a = 30, b = 10;
    int pointer_result;
    calculator ptr_func = Add;
    pointer_result = Calculator(a, b, ptr_func);
    cout << "사칙 연산의 결과는 " << pointer_result << " 입니다." << endl <<endl;
} 


double Add(double a, double b){return a + b;}
double Calculator(double a, double b, calculator func){return func(a, b);}

 

 

 

 

 

📌 auto 키워드

 

auto 키워드는 자동으로 변수의 타입을 결정해줍니다.

단, 선언과 동시에 초기화를 해줘야 컴파일을 돌리면서 컴퓨터가 타입을 결정할 수 있습니다.

 

다음은 함수 원형 코드입니다.

double Add(double, double);
double Calculator(double, double, double(*func)(double, double));

단순히 함수 포인터를 인수로 전달한 것을 확인할 수 있습니다.

 

 

main() 함수 코드입니다.

int main()
{   
    int a = 30, b = 10;
    int pointer_result;
    auto ptr_func = Add;
    pointer_result = Calculator(a, b, ptr_func);
    cout << "사칙 연산의 결과는 " << pointer_result << " 입니다." << endl <<endl;
}

auto 키워드를 쓴다면, 딱히 main() 함수에서 조치를 취할 필요가 없습니다. 그저 auto 키워드를 붙여서 선언만 해주면 됩니다. Calculator 함수에도 포인터를 그대로 넣은 것을 확인할 수 있습니다.

 

 

함수 정의 코드입니다.

double Add(double a, double b){return a + b;}
double Calculator(double a, double b, double(*func)(double, double)){return func(a, b);}

함수 원형과 거의 비슷한 것을 볼 수 있습니다. 포인터를 인수로 받았습니다.

auto 키워드는 함수 원형과 정의에서 인수만 신경쓰면 되기에 아주 편합니다.

 

 

 

지금까지 함수 포인터를 간단/명료하게 표기하는 방법에 대해 알아보았습니다. 

고생하셨습니다.