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 키워드는 함수 원형과 정의에서 인수만 신경쓰면 되기에 아주 편합니다.
지금까지 함수 포인터를 간단/명료하게 표기하는 방법에 대해 알아보았습니다.
고생하셨습니다.
'♣ C++' 카테고리의 다른 글
[C++] 인라인(inline)함수 와 매크로(define)함수 (0) | 2022.06.24 |
---|---|
[C++] 함수 Basic - 참조자, 디폴트 인수, 오버로딩 (0) | 2022.06.24 |
[C++] 함수 Basic - 정의, 인수 전달, 포인터 (0) | 2022.06.23 |
[C++] 구조체(structure type) 개념 및 활용 (0) | 2022.06.17 |
[C++] string 클래스와 메소드 (0) | 2022.06.16 |