본문 바로가기
프로그래밍 언어/C++

[C++] 함수 객체 (function object)

by 까망 하르방 2025. 3. 15.
반응형

함수 객체 (function object)

「( )」 연산자를 재정의 해서 함수 처럼 사용 가능한 객체

 

📌 [C++] 연산자 재정의 (Operator Overloading)

 

[C++] 연산자 재정의 (Operator Overloading)

연산자 재정의 (Operator Overloading)사용자 정의 타입에서 +, - 등 연산자 사용할 수 있는 문법class Point{ int x = 0; int y = 0;public: Point() = default; Point(int x, int y) : x{ x }, y{ y } {}};int main(){ Point p1{ 1, 1 }; Point

zoosso.tistory.com

 


[예제] 함수 객체
p.operator()(1, 2) 와 같은 형태로 사용

#include <iostream>

template<typename T>
struct Plus
{
	T operator()(const T& a, const T& b) const
	{
		return a + b;
	}
};

int main()
{
	Plus<int> p; // 함수가 아닌 객체

	int n1 = p(1, 2); // 객체 p를 함수 처럼 사용
	
}

 

 

Q) 왜 함수를 사용하면 되지 객체를 사용하는가?

• 상태를 가지는 함수
• 클로저
• 인라인 치환성
• 이름 충돌 방지 (ADL 회피)

 

📌 [C++] ADL (Argument Dependent Lookup)

 

[C++] ADL (Argument Dependent Lookup)

ADL (Argument Dependent Lookup)• 함수 검색할 때 인자가 포함된 namespace는 자동으로 검색에 포함! • Koening Lookup 라고도 부름#include namespace Harbang{ class Point {}; void draw(const Point& p) { printf("draw..\n"); }}int mai

zoosso.tistory.com


[예제] 난수 만들기

#include <iostream>
#include <cstdlib>

int urand()
{
	return rand() % 10;
}

int main()
{
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", urand());
	}
}



난수 생성하지만 중간에 중복 숫자가 보이는 것을 확인할 수 있다.
중복 없는 난수를 만드려면
해당 숫자가 등장한 적이 있다는 상태를 보관해주어야 한다.



전역 변수로 값을 보관할 수도 있지만
일반적으로 좋은 코드가 아니다.

 

 

[예제] 함수 객체 (중복 없는 난수)

#include <iostream>
#include <cstdlib>
#include <bitset>

class URandom
{
	std::bitset<10> bs;

public:
	URandom()
	{
		bs.set(); // bit 모두 "1"
	}

	int operator()()
	{
		if (bs.none()) // "1" 인 bit가 없는 경우
		{
			return -1;
		}

		int v = -1;
		while (!bs.test(v = rand() % 10));

		bs.reset(v); // 해당 bit "0"
		return v;
	}
};
URandom urand;


int main()
{
	for (int i = 0; i < 15; i++)
	{
		printf("%d ", urand());
	}
}



크기를 10으로 해놓아서
11번째 숫자부터는 "-1" 

 


📌 [C++] [STL] bitset

 

[C++] [STL] bitset

bitset - 비트연산과 관련된 STL 이다. ▶ 비트마스크 (Bitmask) 비트마스크 (Bitmask) 비트마스크 정수의 이진수 표현(Bit)을 자료 구조로 쓰는 기법 현대의 모든 CPU는 이진수를 이용해도 모든 자fy 표현

zoosso.tistory.com

반응형

댓글