728x90
C와 C++의 함수포인터
C에서의 함수포인터 타입 재정의
- 함수 역시 주소를 가지고 있기 때문 포인터와 마찬가지로 함수를 가리키는 포인터를 만들 수 있다.
//짝수인지 반환 함수
bool isEven(const int& number)
{
return (number % 2) ? false : true;
}
//함수포인터 타입 재정의
typedef bool(*check_func)(const int&);
//배열의 짝수들 출력
void printEvenNumber(const array<int,10>& my_arr, check_func = isEven)
{
for (const auto &e : my_arr)
{
if (isEven(e)) cout << e << ' ';
}
cout << '\n';
}
int main(void)
{
array<int, 10> my_arr{0,1,2,3,4,5,6,7,8,9};
printEvenNumber(my_arr,isEven);
return 0;
}
C++11 에서 타입 앨리어스(alias)
- typedef를 통해 타입을 재정의 하는것 보다 using을 사용하여 가독성이 좋아졌다.
//타입 앨리어스
using check_func_t = bool(*)(const int&)
void printEvenNumber(const array<int,10>& my_arr, check_func_t =isEven)
{
for (const auto &e : my_arr)
{
if (isEven(e)) cout << e << ' ';
}
cout << '\n';
}
int main(void)
{
array<int, 10> my_arr{0,1,2,3,4,5,6,7,8,9};
printEvenNumber(my_arr,isEven);
return 0;
}
C++17 에서 지원하는 functional
- 함수 포인터를 지원하는 클래스의 등장으로 객체 생성이 가능하다.
- functional<type> _obj;
#include<functional> // 헤더를 선언 해주어야 한다.
//functional 을 사용하기위해 매개변수 타입도 맞춰준다.
void printEvenNumber(const array<int,10>& my_arr, function<bool(const int&)> fcnptr =isEven)
{
for (const auto &e : my_arr)
{
if (isEven(e)) cout << e << ' ';
}
cout << '\n';
}
int main(void)
{
//functional 정의
// fcnptr 은 <type>의 isEven 함수를 가리키 포인터가 된다
function<bool(const int&)> fcnptr = isEven;
array<int, 10> my_arr{ 0,1,2,3,4,5,6,7,8,9 };
printEvenNumber(my_arr,fcnptr);
return 0;
}
300x250
'Programing_Language > C++' 카테고리의 다른 글
스마트 포인터 (0) | 2020.12.21 |
---|---|
assert (단언하기) in C++ (0) | 2020.12.15 |
템플릿(Template) (2/2) (템플릿 특수화) (0) | 2020.12.14 |
템플릿(Template) (1/2) (0) | 2020.12.13 |
2차원 동적 배열 할당과 해제 (배열 vs 벡터) (0) | 2020.12.07 |
댓글