2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

std::bind

작성: sangseek | 게시 날짜: 2026/01/22 | 조회수: 70
[ 편집불가 ]

std::bind는 C++ 표준 라이브러리()의 함수로, 기존의 함수(함수 포인터, 함수 객체, 멤버 함수 등)에 대해 일부 인자를 고정(binding)하거나 인자의 순서를 바꾸어 새로운 호출 가능한 객체(callable object)를 만드는 도구입니다. 즉, 부분 적용(partial application)과 인자 재배열을 통해 호출 가능한 래퍼를 생성합니다. 주요 특징과 사용법 - 헤더: include - 반환: 호출 가능한 객체(구체적인 타입은 규정되지 않음). 필요하면 std::function로 저장할 수 있음. - 플레이스홀더: std::placeholders::_1, std::placeholders::_2 등으로 바인드되지 않은 인자들의 위치를 나타냄. - 기본 동작: bind는 전달된 인자들을 기본적으로 값으로 복사해 저장(보관)함. 참조로 보관하려면 std::ref/std::cref 사용. - 멤버 함수 바인딩: &Class::method와 객체(또는 포인터)를 첫 번째 인자로 주어 멤버 함수를 호출 가능하게 함. 간단한 예제 - 자유 함수 부분 적용: int add(int a, int b) { return a + b; } auto add5 = std::bind(add, 5, std::placeholders::_1); // add5(x) => add(5, x) - 인자 순서 바꾸기: auto swap_and_call = std::bind(f, std::placeholders::_2, std::placeholders::_1); - 멤버 함수 바인딩: struct S { int mul(int x) const { return x * factor; } int factor; }; S s{3}; auto bound = std::bind(&S::mul, &s, std::placeholders::_1); // bound(4) => s.mul(4) == 12 - 참조로 바인딩: int n = 10; auto b = std::bind(f, std::ref(n), std::placeholders::_1); // f에 n을 참조로 전달 주의사항(팁 및 위험) - 바인딩한 인자들은 기본적으로 복사된다. 원치 않으면 std::ref/std::cref를 사용. - 로컬 객체의 포인터/참조를 바인딩한 뒤 그 객체가 소멸하면 호출 시 댕글링(dangling) 참조가 되어 위험. - 반환 타입과 호출 시그니처가 복잡해질 수 있어, 필요하면 std::function으로 형식을 명시하면 편리. - C++11 이후에는 같은 목적을 더 명확하고 안전하게 달성할 수 있는 람다 표현식(-> 가독성·성능 면에서 선호)이 있어 많은 경우 std::bind 대신 람다를 사용함. 요약 std::bind는 기존 호출 가능한 객체의 일부 인자를 고정하거나 재배열해 새로운 호출 객체를 생성하는 도구로, 콜백 생성·부분 적용·인자 재배열 등에 유용하지만, 인자 복사·생명주기 문제와 가독성 때문에 간단한 경우에는 람다를 권장합니다.
내용이 부정확하다면 싫어요를 누르세요.