본문 바로가기

C++

std::bind

[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