[STL] 함수 호출 연산자 오버로딩

함수 호출 연산자 오버로딩( ()연산자 )
객체를 함수처럼 동작하게 하는 연산자

 

소스코드
#include <iostream>
using namespace std;

struct FuncObject {
public:
	void operator()(int arg) const {
		cout << "정수: " << arg << endl;
	}

	void operator()(int arg1, int arg2) const {
		cout << "정수: " << arg1 << ',' << arg2 << endl;
	}

	void operator()(int arg1, int arg2, int arg3) const {
		cout << "정수: " << arg1 << ',' << arg2 << ',' << arg3 << endl;
	}
};

void main() {
	FuncObject print;

	cout << "객체 생성 후 암시적 호출\n";
	print(10);
	print(10, 20);
	print(10, 20, 30);
	cout << endl;

	cout << "객체 생성 후 명시적 호출\n";
	print.operator()(10); //객체 생성 후 암시적 호출
	print.operator()(10, 20);
	print.operator()(10, 20, 30);
	cout << endl;

	cout << "임시 객체 생성 후 암시적 호출\n";
	FuncObject()(10); //객체 생성 후 암시적 호출
	FuncObject()(10,20);
	FuncObject()(10,20,30);
	cout << endl;

	cout << "임시 객체 생성 후 명시적 호출\n";
	FuncObject().operator()(10); //임시 객체로 명시적 호출
	FuncObject().operator()(10, 20);
	FuncObject().operator()(10, 20, 30);
}
코드 내용
main함수 내 함수호출에 매개변수 갯수에 따라 오버로딩 하는 함수가 달라지는 것.
암시적 호출은 함수를 간접적으로 호출하는 것이고
명시적 호출은 함수를 직접적으로 호출하는 것이라 보면됨.

 

결과