[C++] 함수객체 기본 예제
[C++] 함수객체 기본 예제
함수 객체(Function Object)는 함수처럼 동작하는 객체이다.
함수처럼 동작하려면 객체가 operator() 를 정의해야 한다.
아래의 예제를 보면 구조체에서 operator() 연산자를 오버라이딩 하고, main에서 해당 구조체를 선언한 후 함수처럼 호출하였다.
#include <iostream> #include <algorithm> using namespace std; struct Functor1{ void operator()(int n){ cout << n << endl; } }; struct Functor2{ void operator()(int n){ cout << n*n << endl; } }; struct Functor3{ void operator()(int n){ cout << "정수 : " << n << endl; } }; int main(){ int arr[5] = { 10, 20, 30, 40, 50 }; Functor1 functor1; functor1(3); cout << endl; for_each(arr, arr + 5, Functor1()); cout << endl; for_each(arr, arr + 5, Functor2()); cout << endl; for_each(arr, arr + 5, Functor3()); return 0; } |
결과 :
3
10
20
30
40
50
100
400
900
1600
2500
정수 : 10
정수 : 20
정수 : 30
정수 : 40
정수 : 50
* 함수 객체의 장점
함수 객체는 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있다.
또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.
속도도 일반 함수보다 함수 객체가 빠르다. 함수의 주소를 전달하여 콜백할 경우 이 함수 포인터는 인라인 될 수 없지만 (함수 포인터는 함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 낸다.) 함수 객체는 인라인 될 수 있고, 컴파일러가 쉽게 최적화 할 수 있다.
출처: https://hyeonstorage.tistory.com/314?category=601868 [개발이 하고 싶어요]
'기타 > C++' 카테고리의 다른 글
[C++] 표준 입출력 (0) | 2021.03.30 |
---|---|
[C++]템플릿 (0) | 2021.03.30 |
[C++] 클래스 템플릿 사용 Array 클래스 예제 (0) | 2019.07.30 |
[C++] 함수 템플릿 사용 template<typename T> (0) | 2019.07.30 |
[C++] 생성자 타입변환과 explicit (0) | 2019.07.30 |
[C++] 스마트 포인터, operator*(), operator->() 연산자 오버로딩 (0) | 2019.07.30 |
[C++] 연산자 오버로딩 정의 (operator) (0) | 2019.07.30 |
[C++] 파일 쓰기 예제 ofstream (0) | 2019.07.30 |