[1. 개요]
socket api 의 bind() 가 아니라, c++ 의 std::bind() 는 함수에 인자등을 미리 고정해서 함수 객체(callable) 를 만든다.
아래와 같은 상황에서 주로 사용하는데,
- callback 을 등록 할 때,
- 함수 객체 호출 시, 일부 인자를 미리 고정하고 싶을 때,
- 다른 함수 객체들과 조합할 때,
- 최신 C++ 에서는 lambda 식을 주로 사용하긴 하지만, 알아 둘 필요 있음.
[2. 사용 방법 - 전역 함수]
#include <iostream>
#include <functional>
using namespace std;
int add(int a, int b) {
return a + b;
}
int main() {
// add의 첫 번째 인자 10을 고정하고, 두 번째 인자는 나중에 받음
auto add10 = std::bind(add, 10, std::placeholders::_1);
cout << add10(5) << endl; // 10 + 5 = 15
}
[3. 사용 방법 - 멤버 함수]
#include <iostream>
#include <functional>
using namespace std;
struct Printer {
void print(int num) {
cout << "Number: " << num << endl;
}
};
int main() {
Printer p;
// 멤버 함수는 객체 주소도 함께 넘겨야 함
auto printerFunc = std::bind(&Printer::print, &p, std::placeholders::_1);
printerFunc(42); // Number: 42
}
멤버 함수의 경우, 함수 주소 명시 후, 객체의 주소를 제일 먼저 넘겨야 한다.
[4. 성능]
lambda 가 훨씬 더 빠르다고 한다. 그 이유는
- 컴파일러에서 inline 최적화가 가능.
'C++' 카테고리의 다른 글
wchar_t 사용에 관하여 [2] (0) | 2025.05.13 |
---|---|
wchar_t 사용과 관련하여. (0) | 2025.05.12 |
bitfield 사용 시 유의할 점 (0) | 2025.04.28 |
OS 별 select() 함수 사용법 (0) | 2025.04.24 |
구조체 대입 연산 (0) | 2025.04.15 |