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

C++ ] Winsock2의 bind 함수와 functional 헤더의 std::bind 함수 충돌 방지

by eteo 2023. 9. 17.

 

 

 

Winsock2 라이브러리와 C++ 표준 라이브러리인 functional 헤더를 모두 포함에서 사용하는 경우 bind함수 때문에 충돌할 수 있다.

 

Winsock2의 bind함수는 전역함수로 전역 네임스페이스에 속해있기 때문에 using namespace std; 를 했더라도 전역 bind 함수가 우선 호출된다.

 

Winsock2 bind함수를 호출할 때는 ::bind로 전역 네임스페이스의 bind를 호출하고 C++표준 라이브러리의 std::bind함수를 호출할 때는 std::bind로 명시적으로 써주면 충돌을 피하고 가독성을 높일 수 있다.

 

#include <winsock2.h>
#include <functional>

int main() {
    // Winsock2 라이브러리의 bind 함수 호출
    ::bind(socket, ...);

    // C++ 표준 라이브러리의 bind 함수 호출
    std::bind(...);

    return 0;
}