2011-10-28 4 views
1

내가 MSDN에서 무엇을 std::bind이며, 무엇을 위해입니다 (즉, 결국이 될 수있는 다른 질문을) 연구되었다 http://msdn.microsoft.com/en-us/library/bb982702.aspx지정되지 않은 바인드

을 그리고 나열된 프로토 타입이라는 것을 보았다

template<class Fty, class T1, class T2, ..., class TN> 
    unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN); 
template<class Ret, class Fty, class T1, class T2, ..., class TN> 
    unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN); 

나를 혼란을 어느 두 가지 이유가 있습니다. 1) 마지막으로 MSVC가 가변성 템플릿을 구현하지 않았으며 2) 내 질문 : 단어 unspecified은 무엇을 의미합니까? (지정되지 않은 동작과 관련이없는 것처럼 보입니다.)

답변

1

지정되지 않은은 반환 유형이 지정되지 않은 유형입니다. 반환 된 형식이 표준에서 요구하는 요구 사항을 준수하는 한 표준에서는 bind에서 특정 형식을 반환 할 필요가 없습니다.

... 현재 VS가 구현하는지 여부는 알 수 없지만 boost::bind에 대한 동일한 설명서가 표시되며 이미 여러 시간 동안 가변적 인 템플릿 지원없이 다른 컴파일러에서 컴파일되고 있습니다. 설명서에 다른 유형의 N 인수를 전달할 수 있다고 나와 있지만, 반드시 단일 템플릿이 있다는 것을 의미하지는 않습니다. 1-ary, 2-ary ...의 집합으로 구현할 수 있습니다. - 기본 템플릿.

설명서에는 구현 방법에 대한 자세한 내용이 아닌 사용시 예상 할 수있는 동작이 나와 있습니다.

+0

오, 반환 유형의 부족을 간과했습니다. 그게 전부 야. –

1

{1, 2, ..., N} 개의 인수가 예상되는 별도의 오버로드가 있습니다. 이 모든 것을 나열하는 대신 설명서에서는 다양한 매개 변수 수를 사용할 수 있음을 보여주기 위해 축약어를 사용합니다. 유효한 C++ 구문을 설명하기위한 것이 아닙니다. 설명서에 어딘가에 언급 할 것을 기대합니다 N입니다.

결과 유형은 전달 된 인수에 따라 달라지며 이는 어떤 형태의 Functor 일 것이며 해당 functor는 일반적으로 function 객체에 저장 될 수 있습니다. 또는 결과를 for_each에 직접 전달하고 컴파일러의 템플릿 유형 공제가 그것을 계산합니다. 결과가 호출 가능하다면 실제 유형은 중요하지 않으며 문서에서 간략하게 설명하려고 복잡 할 것입니다.

1

Visual Studio는 가변적 템플릿을 구현하지 않습니다. 그들은 본질적으로 기능의 과부하를 많이 겪어 개념을 에뮬레이션합니다 (매크로를 통해 구축 될 가능성이 높음). 이것은 boost::bind이 구현 된 방법으로, std::bind의 출처입니다.

unspecified 반환 유형 std::bind은 정확히 같습니다. 움직일 수있는 유형의 객체 여야합니다. 이 객체는 std::bind에 바인딩 된 함수를 호출 할 수 있도록 operator()을 오버로드합니다.