본문 바로가기
Language/C++

함수 객체와 그 활용성에 관하여

by W00gie 2021. 1. 6.

함수객체(Functor)란 함수처럼 호출 가능한 클래스 객체 이다.

일반적으로 () 연산자를 오버로딩하여 사용된다.

따라서 일반적으로 객체지만 함수처럼 functor() 와 같은 형식으로 호출할 수 있어 직관적으로 사용할 수 있다.

 

#include <iostream>
#pragma warning(disable : 4996)

using namespace std;


class Adder
{
public:
	int operator ()(int a, int b) const    // () 연산자 오버로딩
	{
		return a + b;
	}
};

int main()
{
	Adder add;   //Adder 클래스의 함수객체 add 선언

	int sum = add(10, 20);
	cout << "sum= " << sum << endl;


}

 

함수객체의 장점 

 함수 객체를 이용한 호출은 일반 함수보다 빠르다.

함수의 주소를 전달하여 콜백하는 함수 포인터는 *인라인될 수 없지만, 함수객체는 인라인 될 수 있기 때문이다.

(콜백 함수는 인라인 함수의 복사본 함수를 만들어냄)

 추가적으로 함수 객체의 서명이 같더라도 객체 타입으로 추가적인 분별을 하기 때문에

같은 서명의 함수를 다수 작성이 가능해 다수의 객체를 다루는 코드를 작성할 시에

보다 직관적인 코드를 작성할 수 있을 것으로 예상된다.

 

*인라인 :  컴파일러가 내부 루프가 없는 짧은 함수 코드를 function call 부분에 대입해 시간을 단축시킨 코드