2013-03-10 9 views

답변

14

이것이 boost::bind의 기능이며 Boost.Bind 작성자가 TR1에 추가 할 제안서를 작성하여 표준에 복사했습니다.

Boost.Bind가 그렇게하는 이유는 무엇인지 모르겠지만 STL에서 나온 1998 년 표준의 std::bind1ststd::bind2nd과 일치해야 할 수도 있습니다. 그 맥락 "1"에서 즉 "최초의"올바른 (인덱스 제로의 항목이 아닌 제로 번째, 항목 에도 제로 기반 색인 시스템.)

그래서 아마 자리가해야 _1st, _2nd, _3rd, _4th 등을 할 수 있지만, ordinal numbers에 일치하지 않는 접미사를 모르는 영어 이외의 스피커는하지만 _1, _2

그냥 추측을 기억하는 것이 더 쉬울 것입니다. 질문이 나에게 발생하지 않았으므로 이제는 궁금하다 .-

6

이 규칙은 이전 버전 인 Boost.bind에서 가져온 것입니다.

Boost 라이브러리가 1로 시작하는 이유 : C++ 03의 일부인 바인더는 first_argument 및 second_argument를 유형 이름으로 사용했습니다.

C++ 표준 라이브러리는 bind1st()bind2nd()이므로 n-ary 함수에 대한 일반적인 일반화는 "제 3 바인딩", "바인딩 4th"등입니다.

두 가지 모두 실제 이유는 아니지만 가능성있는 설명을 제공합니다.

+1

일반적으로 배열의 0 번째 요소에 대해서 말하지 않기 때문에 나는 "누군가 제 0 인수에 대해 이야기하는 것을 들어 보지 못했습니다"라는 것을 구입하지 않을 것입니다. "1st"라고 말하면서 인덱스는 0입니다. 그러나 역사적인 주장은 의미가 있습니다.표준 라이브러리는'bind1st()'와'bind2nd()'를 가지고 있었기 때문에'n'-ary 함수에 대한 자연적인 일반화는 "제 3 바인딩", "제 4 바인딩"등이있었습니다. –

+1

나는 "zero-st"라는 말을 들어 본 적이 없지만 "zero-th"라고 들었습니다 ... 그것은 올바른 영어가 아닙니다. :) –

+0

@AndyProwl 예, 정말 설득력이 없습니다. 편집 할 수 있습니까? 나는 모바일에있어 고통 스럽다. – pmr

-1

부스트 바인드 라이브러리의 설계자는 MSDOS 배치 구문의 팬이었다. 배치 구문

%1 첫번째 인수 %2 번째 %3 제 등을 지칭하지만 % 유효한 C++ 식별되지 않기 때문에, 그들은 _로 대체.

MSDOS 배치 구문에서 %0은 배치 파일의 이름을 나타냅니다. 이 경우 _0_1, _2, _3 등의 기능에 바인딩됩니다.

사실, 아니요, 실제로는 아닙니다.

+0

Upvoted 나는 많은 사람들이 당신의 대답의 마지막 줄을 만들지 않았다고 추측하고 있기 때문에 POSIX 쉘 ('$ 0','$ 1' 등)에 대해서 실제로 비슷하지만 심각하다고 생각했다. –

3

이점은 std::is_placeholder의 작동입니다. 결과는 true 또는 false가 아니라 자리 표시 자 자체의 가치입니다.

std::is_placeholder<_1>::value == 1 
std::is_placeholder<_2>::value == 2 
std::is_placeholder<_7>::value == 7 

아무것도하지만 자리 표시 자 (물론 거짓이다) 0로 평가하지 않습니다. 자리 표시자가 _0에서 시작하면 이는 작동하지 않습니다.

+0

true이면, '_0'에 값 1을,'_1'에 값 2를 부여하여 쉽게 작동하도록 만들 수 있습니다. 따라서, non-placeholder는 여전히 값 0을 갖습니다. –