std bind 예제

그러나. *해야* 바인딩을 사용 하 여 멤버 함수 호출에 대 한 정보를 추가 합니다. 숨겨진 `this`인수를 바인딩하고 멤버 함수를 일반 인수로 변환 할 수 있다는 사실! 예를 들어 Windows API 함수 및 COM 인터페이스 멤버 함수는 __stdcall이라는 호출 규칙을 사용합니다. 볼랜드 VCL 구성 요소는 __fastcall을 사용합니다. Mac 도구 상자 함수는 파스칼 호출 규칙을 사용합니다. 오버로드된 함수를 바인딩하려고 하면 바인딩할 오버로드를 알 수 없기 때문에 일반적으로 오류가 발생합니다. 이 간단한 예제에서와 같이 const 및 non const라는 두 개의 오버로드가 있는 멤버 함수의 일반적인 문제입니다. std::bind함수에 인수 집합을 바인딩하는 std:::function 개체를 반환하는 템플릿 함수입니다. 이것이 실제로 의미하는 바는 바인딩의 결과를 편리하게 부정할 수 있다는 것입니다: std::bind1st(f, a)를 에뮬레이트할 때 이 범주의 일반적인 실수는 올바른 바인드(f, a, _1) 대신 바인드(f, a, _2)를 입력하는 것입니다.

위의 코드에서 bind()는 함수호출을 수정하여 1인수를 취하고 원하는 출력을 반환했습니다. make_adaptable 함수는 에 정의되어 있으며, 에 추가하여 명시적으로 포함되어야 합니다. 바인드 또는 자리 표시자 인수에 의해 생성되므로 아래 예제가 예상대로 작동하지 않습니다: 1 | 함수 f = 바인드(show_text, “바운드 함수”); 2 | x.push_back(f); std::bind함수 어댑터 역할을 하는 표준 함수 개체즉, 함수어댑터로 작동하며, 즉 함수를 입력으로 받아 전달된 함수 바인딩 또는 재배열된 인수 중 하나 이상이 있는 출력으로 새 함수 Object를 반환합니다. 바인딩하는 인수는 반환된 함수 개체에 의해 내부적으로 복사되고 유지됩니다. 예를 들어 다음 코드에서: 필요에 따라 함수의 작업을 조작해야 하는 경우가 있습니다. 기본 인수를 사용하도록 함수를 미리 정의하면 함수의 다양성이 제한되고 기본 인수를 사용할 수 있으며 매번 비슷한 값을 사용합니다. C++11 이후부터 바인딩 함수가 도입되어 이 작업이 더 쉬워졌습니다. 일부 플랫폼에서는 std::strcmp와 같은 extern “C” 함수는 짧은 형태의 바인딩으로 인식되지 않습니다. 부스트::바인드 표준 함수 std::bind1st 및 std::bind2nd의 일반화입니다. 임의함수 객체, 함수, 함수 포인터 및 멤버 함수 포인터를 지원하며 모든 인수를 특정 값에 바인딩하거나 입력 인수를 임의의 위치로 라우팅할 수 있습니다.

bind 함수 개체에 요구 사항을 배치하지 않습니다. 특히 result_type, first_argument_type 및 second_argument_type 표준 형식이 필요하지 않습니다. std::bind() 즉, 인수를 다시 정렬할 수도 있습니다.

Geplaatst in Geen categorie