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;
}
'프로그래밍 > C++' 카테고리의 다른 글
Windows 프로그래밍 시 OutputDebugString 사용해 디버깅 정보 출력하기 + 가변인자 받아서 디버깅 정보 출력 (0) | 2023.09.21 |
---|---|
C++ ] 현재 실행중인 실행파일의 경로 얻기, GetModuleFileName (0) | 2023.09.19 |
C++ ] 멤버 함수 포인터 사용하기 / 함수포인터 대신 std::function 사용 / using으로 별칭 사용 (0) | 2023.09.15 |
Precompiled Header를 사용해 컴파일 시간 단축하기 (0) | 2023.09.15 |
char, wchar_t, TCHAR (0) | 2023.09.15 |